HTTP请求中的Python套接字错误

HTTP请求中的Python套接字错误,python,http,sockets,Python,Http,Sockets,我正在尝试在客户端和服务器之间交换HTTP消息。 请求包含HTTP/1.0,当我把它放在请求的开头时,它工作正常 client_socket.send("HTTP/1.0 400 Bad Request") 但当我把它放在末尾时,它在另一端没有收到,程序停止 client_socket.send("GET 1.txt HTTP/1.0") 在HTTP和/1.0之间向请求添加额外空间时 client_socket.send(“GET 1.txt HTTP/1.0”) 它工作正常,我收到了请求文

我正在尝试在客户端和服务器之间交换HTTP消息。 请求包含HTTP/1.0,当我把它放在请求的开头时,它工作正常

client_socket.send("HTTP/1.0 400 Bad Request")
但当我把它放在末尾时,它在另一端没有收到,程序停止

client_socket.send("GET 1.txt HTTP/1.0")
在HTTP和/1.0之间向请求添加额外空间时

client_socket.send(“GET 1.txt HTTP/1.0”)

它工作正常,我收到了请求文件的内容


我认为问题在于正斜杠,我想省略它,以便使我的客户端连接到另一种语言编写的另一个给定服务器。

HTTP 1.0请求至少具有以下格式:

GET /1.txt HTTP/1.0<CRLF>
Host: the.server.com<CRLF>
<CRLF>
GET/1.txt HTTP/1.0
主持人:the.server.com

也就是说,所有行尾都应该是CR+LF(即ASCII字符13和10十进制,或者Python字符串中的“\015\012”),在第一行之后是任意数量的附加标题,后面是一个空行。虽然不是严格要求,但您应该始终提供Host:header来帮助虚拟主机;没有这个,许多网站就无法工作。请注意,GET动词后面的URI部分必须是绝对值,因此必须以斜杠开头。

您完全了解HTTP协议吗?第一条消息通常从服务器发送到客户端,而第二条消息则从客户端发送到服务器。您试图以哪种方式发送此消息?首先,所有请求/响应标头字段应以换行符(
'\r\n'
)终止,整个标头应以空行终止。要继续,请参阅@buc…的注释,
GET
请求后面应始终带有
Host:
HTTP-header。为什么要使用套接字?一般来说,如果你精通协议,需要低水平的控制(从这篇文章看来,你似乎不是)。是什么阻止您使用
urllib2
模块(Python stdlib)或
requests
模块?好的,我知道第一个来自服务器,第二个来自客户端。我的意思是,在一般情况下,当替换这两条消息时,也会收到一条带有HTTP/1.0的消息,而另一条则不会。我正在本地主机上工作,在发送请求之前,我指定了端口号并建立了TCP连接。
Host:xxx
在HTTP 1.1中是必需的,而在HTTP 1.0中不是必需的;最重要的是请求后的双换行符。严格来说应该是CRLFCRLF,但实际上大多数web服务器也理解“\n\n”。HTTP1.0中不需要它,是的,但许多网站在没有虚拟主机的情况下仍然无法工作。我仍然有这个问题,这是一个奇怪的问题。当仅通过套接字发送时会出现问题,当字符串的末尾中间有/1.0时,不会发送。当我用空格分隔时,它将被发送(即/1.0或/1.0)。但是,当/1.0出现在句子的第一个单词中时,就可以了。