学习时使用 http://shop.projectsedu.com/goods/1/ 无法返回数据

学习时使用 http://shop.projectsedu.com/goods/1/ 无法返回数据

import socket

from urllib.parse import urlparse

url = "http://www.baidu.com"

url = urlparse(url)

host = url.netloc

path = url.path

if path == "":

path = "/"

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.connect((host,80))

sent_message = "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close" % (path, host)

client.send(sent_message.encode("utf8"))

data = client.recv(5)

print(data.decode("utf8"))

写百度的GET请求时,如果请求行与请求头之间只写一个回车换行(即上面样子)会卡在recv这一步;而写两个回车换行会正常返回数据

《HTTP权威指南》里面讲的是一个回车换行,这样应该才是标准吧

主要问题是在学习时看视频使用 http://shop.projectsedu.com/g... 作为例子,请求内容与视频内一样,但无法返回数据,卡在了recv这一步;如果改为两个回车换行符会返回400 bad request,视频地址为:
https://www.bilibili.com/vide...


回答:

HTTP header 是以两个 CRLF 结束的。

所以你的 header 并没有结束。

当你在请求行与请求头之间写了两个回车换行是,你的 header 实际只包含请求行,但是正常结束了。其余的“请求头”会成为 body 。

以上是 学习时使用 http://shop.projectsedu.com/goods/1/ 无法返回数据 的全部内容, 来源链接: utcz.com/a/160526.html

回到顶部