<p><code>httplib</code>(<a href="https://github.com/kennethreitz/requests/blob/master/requests/packages/urllib3/connection.py#L10" rel="nofollow noreferrer">which ^{<cd2>} relies upon for HTTP(S) heavy lifting</a>)始终使用<code>HTTP/1.0</code>和{<cd4>}:</p>
<p><a href="https://github.com/python/cpython/blob/2.7/Lib/httplib.py#L788" rel="nofollow noreferrer">^{<cd5>}</a>:</p>
<pre><code>def _tunnel(self):
self.send("CONNECT %s:%d HTTP/1.0\r\n" % (self._tunnel_host,
self._tunnel_port))
for header, value in self._tunnel_headers.iteritems():
self.send("%s: %s\r\n" % (header, value))
self.send("\r\n")
<...>
</code></pre>
<p>所以除了编辑子例程之外,您不能在这里“强制”它使用“HTTP/1.1”。在</p>
<hr/>
<p>如果代理不支持HTTP/1.0,这可能就是问题所在—特别是,1.0不需要<code>Host:</code>头,而且实际上,通过将日志输出与上面的代码进行比较可以看出,<code>httplib</code>不发送它。<a href="https://stackoverflow.com/questions/246859/http-1-0-vs-1-1">While, in verity, a proxy may expect it regardless</a>。但是如果是这种情况,您应该已经从代理或其他响应CONNECT的错误中获得了一个错误,除非代理是如此的混乱以至于它用一些默认值(或垃圾)代替<code>Host:</code>,无论如何都返回{<cd9>},并试图连接到上帝知道的地方,此时您会超时。在</p>
<p>您可以使<code>httplib</code>添加要连接的<code>Host:</code>头,方法是将其添加到<code>_tunnel_headers</code>(间接):</p>
^{2}$