Python urllib2 HTTPS 和代理 NTLM 认证

6 投票
3 回答
11784 浏览
提问于 2025-04-15 14:37

urllib2这个库好像不太支持通过代理进行HTTPS连接,尤其是使用NTLM认证的时候。有没有人知道有没有什么补丁可以让它支持在代理上使用HTTPS和NTLM认证呢?

谢谢,

Laurent

3 个回答

1

这里有一个不错的做法(关于使用代理的HTTPS),以及相关讨论,可以在这里查看。我们可以把这个做法和ZZ已经提到的python-nltm代码结合起来。

2

http://code.google.com/p/python-ntlm/

我没试过用HTTPS,但我觉得应该是可以的。

补充说明:如果你在使用SSL隧道,代理认证就不太靠谱了。

在HTTPS上使用基本认证的代理并不安全,因为SSL是通过隧道传输的。在这种情况下,你的密码会以明文(经过Base64编码)发送到代理服务器。很多人以为密码会在SSL里被加密,但其实并不是这样。

支持其他加密或哈希机制,比如Digest或NTLM,几乎是不可能的,因为这些机制需要进行多次协商,而这在CONNECT协议中并没有定义。这种协商是在HTTP连接之外进行的,所以在代理或浏览器中实现起来非常困难。

如果这是一个企业级的代理,IP访问控制列表(ACL)是唯一安全的解决方案。

6

回复得有点晚。urllib2不支持NTLM代理,但pycurl是可以的。摘录如下:

self._connection = pycurl.Curl()
self._connection.setopt(pycurl.PROXY, PROXY_HOST)
self._connection.setopt(pycurl.PROXYPORT, PROXY_PORT)
self._connection.setopt(pycurl.PROXYUSERPWD,
                        "%s:%s" % (PROXY_USER, PROXY_PASS))
...

撰写回答