【发布时间】:2016-05-03 03:06:34
【问题描述】:
从 Python 3.4 和 urllib3.request 调用 Apple Search API 时是否应该关闭证书验证并忽略警告?
我尝试了什么:
-
当我使用 urllib.request 从虚拟环境(使用 Visual Studio 2013 的 Python 工具)进行调用时,我首先发现了一个问题,例如
r = urllib.request.urlopen('https://itunes.apple.com/lookup?id=429313263')引发此错误:
urllib.error.URLError:
奇怪的是,当我从正常的 Python 3.4 环境(即不在虚拟环境中)发出相同的调用时,我收到 no 错误。
-
但是,我想使用虚拟环境,所以我想我会尝试使用 urllib3.request。当我要求证书验证时,它也失败了:
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where()) r = http.request('GET', 'https://itunes.apple.com/lookup?id=429313263')urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:600)
这是否仅仅意味着苹果服务器上的证书有问题?
-
我将调用更改为不需要认证:
http = urllib3.PoolManager(cert_reqs='CERT_NONE',assert_hostname=False)不出所料地给出了警告:
InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。见:https://urllib3.readthedocs.org/en/latest/security.html
-
我禁用了警告(显然通常不建议这样做):
urllib3.disable_warnings()
【问题讨论】:
标签: python-3.x urllib3