我正在尝试使用 urllib2.ProxyHandler 测试代理连接。但是,在某些情况下,我可能会请求一个 HTTPS 网站(例如:https : //www.whatismyip.com/)
如果请求 HTTPS 站点,Urllib2.urlopen() 将抛出 ERROR。所以我尝试使用一个辅助函数来重写 URLOPEN 方法。
这是辅助函数:
def urlopen(url, timeout):
if hasattr(ssl, 'SSLContext'):
SslContext = ssl.create_default_context()
SslContext.check_hostname = False
SslContext.verify_mode = ssl.CERT_NONE
return urllib2.urlopen(url, timeout=timeout, context=SslContext)
else:
return urllib2.urlopen(url, timeout=timeout)
Run Code Online (Sandbox Code Playgroud)
这个基于答案的辅助函数
然后我使用:
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1:8080'})
)
)
Run Code Online (Sandbox Code Playgroud)
为 urllib.opener 设置 http 代理。
理想情况下,当我通过使用请求网站时,它应该可以工作,urlopen('http://whatismyip.com', 30)并且应该通过 http 代理传递所有流量。
但是,即使是HTTP站点,urlopen()也会一直陷进去if hasattr(ssl, 'SSLContext')。此外,HTTPS 站点也没有使用 HTTP 代理。这会导致 HTTP 代理无效并且所有流量都通过未经代理的网络
我也尝试过这个答案将 HTTP 更改为 HTTPS,urllib2.ProxyHandler({'https': …