【发布时间】:2009-12-03 16:11:14
【问题描述】:
编辑:
此问题无效。原来透明代理正在发出向前的 HTTP 1.0 请求,即使 urllib/httplib 最初确实发出了 HTTP 1.1 请求。
原始问题:
默认情况下,urllib2.urlopen 总是发出 HTTP 1.0 请求。
有什么办法让它与 HTTP 1.1 对话?
【问题讨论】:
编辑:
此问题无效。原来透明代理正在发出向前的 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的?
【讨论】: