Python 通过urllib2的HTTPS请求在NTLM代理后失败

Python 通过urllib2的HTTPS请求在NTLM代理后失败,python,https,urllib2,monkeypatching,Python,Https,Urllib2,Monkeypatching,通过Python的urllib2,我在一个公司NTLM代理之后,试图通过HTTPS获取数据 我跑 但我得到的是错误 urllib2.URLError: <urlopen error [Errno 8] _ssl.c:507: EOF occurred in violation of protocol> urllib2.URLError: 如何修复此错误 注意0:使用相同的代码,我可以检索不安全的HTTP等价物 注1:通过普通浏览器,我可以通过相同的公司代理访问(和其他HTTPS

通过Python的
urllib2
,我在一个公司NTLM代理之后,试图通过HTTPS获取数据

我跑

但我得到的是错误

urllib2.URLError: <urlopen error [Errno 8] _ssl.c:507: 
EOF occurred in violation of protocol>
urllib2.URLError:
如何修复此错误

注意0:使用相同的代码,我可以检索不安全的HTTP等价物

注1:通过普通浏览器,我可以通过相同的公司代理访问(和其他HTTPS站点)

注2:我在网上读到了许多类似的问题,一些人认为这可能与证书验证有关,但
urllib2
并不验证证书


注3:有些人建议在类似情况下使用MoneyPatch,但我想,monkeypatch
\u ssl.c

问题是Python的标准HTTP库没有完全使用Microsoft专有的NTLM身份验证协议

我通过设置一个支持NTLM的本地代理解决了这个问题-为我做了这件事。(*)-它提供针对公司代理的身份验证,并将我的python代码指向这个本地代理,而无需身份验证凭据

此外,我还必须在上面列出的python代码中添加一个HTTPS的代理处理程序。所以我换了两行

proxy_url = 'http://user:pw@ntlmproxy:port/' 
proxy_handler = urllib2.ProxyHandler({'http': proxy_url})
proxy_url = 'http://localproxy:localport/' 
proxy_url_https = 'https://localproxy:localport/' 
proxy_handler = urllib2.ProxyHandler({'http': proxy_url, 'https': proxy_url_https})
用两行

proxy_url = 'http://user:pw@ntlmproxy:port/' 
proxy_handler = urllib2.ProxyHandler({'http': proxy_url})
proxy_url = 'http://localproxy:localport/' 
proxy_url_https = 'https://localproxy:localport/' 
proxy_handler = urllib2.ProxyHandler({'http': proxy_url, 'https': proxy_url_https})
然后请求就完美地工作了



(*)
ntlmaps
是一个Python程序。由于我个人环境中的某些原因,对我来说,代理必须是一个python程序。)

请查看google。也许会有帮助!看起来如下所示:,ntlm代理身份验证尚不适用于python模块。@pavel_form I可以以相同的方式检索不安全的HTTP等价物。为什么NTLM身份验证适用于HTTP而不适用于HTTPS?使用我在相关线程中发布的COM对象的解决方案: