为什么我不能通过HTTP 1.1从youtube获取响应头?

时间:2013-12-14 09:27:18

标签: python

在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循环中停留很长时间(它不是循环但是等待结束信号)。为什么会这样?

1 个答案:

答案 0 :(得分:0)

HTTP 1.1 会保持连接打开,除非您传递标题Connection: close。请参阅:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

如果您希望立即关闭连接,请使用HTTP 1.0或发送标题Connection: close