Python 问题解决 | urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

环境和笔记:

macOS 10.12.6
Python3.7.0
pycharm community 2019.1
GitHub:https://github.com/Biosciman

问题代码

from urllib.request import urlopen
import json

json_url = "https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json"

response = urlopen(json_url)  # 出问题步骤

# 读取数据
req = response.read()
# 将数据写入文件
with open('btc_close_2017_urllib.json', 'wb') as f:
    f.write(req)
# 加载json格式
file_urllib = json.loads(req)
print(file_urllib)

遇到的问题

下载网络上文件时遇到urllib.error.URLError:证书认证失败

urllib.error.URLError:

ssl.SSLCertVerificationError
urllib.error.URLError

解决方案

方案1:在调用urlopen() 函数时加入context 参数

import ssl
context = ssl._create_unverified_context()
response = urlopen(json_url, context=context)

from urllib.request import urlopen
import ssl  # 解决步骤1
import json

json_url = "https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json"

context = ssl._create_unverified_context()  # 解决步骤2

response = urlopen(json_url, context=context)  # 解决步骤3

# 读取数据
req = response.read()
# 将数据写入文件
with open('btc_close_2017_urllib.json', 'wb') as f:
    f.write(req)
# 加载json格式
file_urllib = json.loads(req)
print(file_urllib)

方案2:全局取消证书验证

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

from urllib.request import urlopen
import ssl  # 解决步骤1
import json

json_url = "https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json"

ssl._create_default_https_context = ssl._create_unverified_context  # 解决步骤2
response = urlopen(json_url)

# 读取数据
req = response.read()
# 将数据写入文件
with open('btc_close_2017_urllib.json', 'wb') as f:
    f.write(req)
# 加载json格式
file_urllib = json.loads(req)
print(file_urllib)

参考资料

  1. certificate verify failed 解决方法
  2. certificate verify failed
  3. Python--urlopen error

你可能感兴趣的:(Python 问题解决 | urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed)