编辑:
这个问题是无效的。事实证明,即使 urllib/httplib 最初确实在发出 HTTP 1.1 请求,透明代理也在发出向前的 HTTP 1.0 请求。
原始问题:
默认情况下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的?