http get返回以\ r \ n \ r \ n结尾的行而不是\ r \ n

时间:2017-09-08 16:26:43

标签: python http

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.sina.com.cn', 80))
s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
buffer = []
while True:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = b''.join(buffer)
s.close()
with open('d:/sina.html', 'wb') as f:
    f.write(data)
print('done!')enter code here

s.send(xxx)中,\r\n\r\n之后有两个close,它可以正常工作,但如果我只写一个\r\n,那么我什么也得不到。 为什么会这样?

2 个答案:

答案 0 :(得分:3)

因为这是HTTP协议的要求;你拥有来关闭带有双CRLF对的标头。即使没有请求正文,这也适用。

答案 1 :(得分:1)

来自维基百科:

<块引用>

报头部分的结尾由一个空字段行表示,从而导致传输两个连续的 CR-LF 对。

快速浏览 HTTP header fields 维基百科页面应该可以消除混淆。