编辑:
此问题无效。原来是一个透明代理正在进行HTTP 1.0请求,尽管urllib/httplib最初确实发出了HTTP 1.1请求。
原始问题:
默认情况下,urllib2.urlopen
总是发起HTTP 1.0请求。
是否有任何方法让它使用HTTP 1.1?
你认为为什么它尚未使用http 1.1?你是否尝试过类似以下的操作...:
>>> import urllib2
>>> urllib2._opener.handlers[1].set_http_debuglevel(100)
>>> urllib2.urlopen('http://mit.edu').read()[:10]
connect: (mit.edu, 80)
send: 'GET / HTTP/1.1
(等等等等)? 这应该显示它已经发送了一个1.1的GET请求。
urllib2使用httplib进行HTTP请求。我的Python 2.6.4在httplib中明确使用HTTP/1.1,尽管它可以处理来自1.1、1.0或0.9服务器的响应。从2.3版本开始,这似乎就是情况(可能追溯到1.5版本)。
但是,如果需要通过代理隧道传输,则会发送以下请求:
CONNECT host:port HTTP/1.0
那个/1.0字符串是硬编码的。
你使用的Python版本是什么,以及你如何使用urllib2?