3

编辑:

这个问题是无效的。事实证明,即使 urllib/httplib 最初确实在发出 HTTP 1.1 请求,透明代理也在发出向前的 HTTP 1.0 请求。

原始问题:

默认情况下urllib2.urlopen总是发出 HTTP 1.0 请求。

有什么方法可以让它与 HTTP 1.1 对话吗?

4

2 回答 2

12

为什么你认为它还没有使用 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 请求。

于 2009-12-03T16:22:56.150 回答
3

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的?

于 2009-12-03T17:20:18.733 回答