在python 3.3中,我想从youtube网页获取响应头。使用HTTP 1.0,下面的代码工作正常:
import socket
PATH='/watch?v=GVIjOr98B7Q'
HOST='www.youtube.com'
buffer = bytes('HEAD %s HTTP/1.0\r\nHost: %s\r\n\r\n' %(PATH, HOST),'ascii')
PORT=80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(buffer)
td=b''
while 1:
data = s.recv(1024)
td+=data
if not data:
break
但是,如果我用HTTP 1.1替换HTTP 1.0:
buffer = bytes('HEAD %s HTTP/1.1\r\nHost: %s\r\n\r\n' %(PATH, HOST),'ascii')
并且任何其他行保持不变。它将在while循环中停留很长时间(它不是循环但是等待结束信号)。为什么会这样?
答案 0 :(得分:0)
HTTP 1.1 会保持连接打开,除非您传递标题Connection: close
。请参阅:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
如果您希望立即关闭连接,请使用HTTP 1.0
或发送标题Connection: close