代码示例
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: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051)>
解决方案
方案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)
评论前必须登录!
注册