Python 3 个带有自签名证书的 urllib
Python 3 urllib with self-signed certificates
我正在尝试使用 Python 从内部服务器下载一些数据。由于它是内部的,因此它使用自签名证书。 (我们不想为永远不会出现的服务器支付 Verisign "in the wild.")代码的 Python 2.6 版本运行良好。
response = urllib2.urlopen(URL)
data = csv.reader(response)
我现在正在尝试更新到 Python 3.4(长话短说,不要问。)但是,使用 Python 3 的 urllib 失败:
response = urllib.request.urlopen(URL)
它抛出 CERTIFICATE_VERIFY_FAILED 错误。
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)>
在网上阅读时,显然 Python 2.6 urllib2 不会费心验证证书。某些版本的 urllib 允许将 "verify=False" 传递给方法签名,但这在 Python 3.4.
中似乎不起作用
有谁知道我该如何解决这个问题?由于公司安全准则,我想避免使用 Requests 包。
urllib.request.urlopen
有一个接受 SSLContext object. So, passing a SSLContext
object with .verify_mode set to ssl.CERT_NONE 的上下文关键字参数,即 SSLContext.verify_mode = ssl.CERT_NONE
应该等于 verify=False
使用以下方法为 URL
禁用 SSL 证书验证
import ssl
myssl = ssl.create_default_context();
myssl.check_hostname=False
myssl.verify_mode=ssl.CERT_NONE
urlopen("URL",context=myssl)
使用以下内容禁用所有 URLs
的 SSL 证书验证
ssl._create_default_https_context = ssl._create_unverified_context
urlopen("URL");
与urllib3:
import urllib3
urllib3.disable_warnings()
http.request('GET', 'https://example.org')
我正在尝试使用 Python 从内部服务器下载一些数据。由于它是内部的,因此它使用自签名证书。 (我们不想为永远不会出现的服务器支付 Verisign "in the wild.")代码的 Python 2.6 版本运行良好。
response = urllib2.urlopen(URL)
data = csv.reader(response)
我现在正在尝试更新到 Python 3.4(长话短说,不要问。)但是,使用 Python 3 的 urllib 失败:
response = urllib.request.urlopen(URL)
它抛出 CERTIFICATE_VERIFY_FAILED 错误。
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)>
在网上阅读时,显然 Python 2.6 urllib2 不会费心验证证书。某些版本的 urllib 允许将 "verify=False" 传递给方法签名,但这在 Python 3.4.
中似乎不起作用有谁知道我该如何解决这个问题?由于公司安全准则,我想避免使用 Requests 包。
urllib.request.urlopen
有一个接受 SSLContext object. So, passing a SSLContext
object with .verify_mode set to ssl.CERT_NONE 的上下文关键字参数,即 SSLContext.verify_mode = ssl.CERT_NONE
应该等于 verify=False
使用以下方法为 URL
禁用 SSL 证书验证import ssl
myssl = ssl.create_default_context();
myssl.check_hostname=False
myssl.verify_mode=ssl.CERT_NONE
urlopen("URL",context=myssl)
使用以下内容禁用所有 URLs
的 SSL 证书验证 ssl._create_default_https_context = ssl._create_unverified_context
urlopen("URL");
与urllib3:
import urllib3
urllib3.disable_warnings()
http.request('GET', 'https://example.org')