我设置了一个用于测试的服务器,使用了自签名证书,并希望能够对其进行测试。
如何在Python 3版本的urlopen
中忽略SSL验证?
我找到的所有信息都涉及到urllib2
或Python 2。
在Python 3中,urllib
已经从urllib2
改变:
Python 2,urllib2:urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]]])
https://docs.python.org/2/library/urllib2.html#urllib2.urlopen
Python 3:urllib.request.urlopen(url[, data][, timeout])
https://docs.python.org/3.0/library/urllib.request.html?highlight=urllib#urllib.request.urlopen
所以我知道这可以在Python 2中以下面的方式完成。然而,Python 3的urlopen
缺少上下文参数。
import urllib2
import ssl
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
urllib2.urlopen("https://your-test-server.local", context=ctx)
是的,我知道这是一个糟糕的想法。这只是为了在私人服务器上进行测试。
我在Python 3文档中找不到相关方法,其他问题也没有提供解决方案。即使是明确提及Python 3的问题,也仍然提供urllib2/Python 2的解决方案。