相信有很多小伙伴在寫爬蟲或者調用API時,遇到過這樣的問題:
然后請求返回的結果是這樣的:
這時候不管怎么修改header,問題都無法得到解決。
這是什么原因呢?
是因為該網站采用了https協議卻沒有SSL證書或者該證書過期了
那我們該怎么辦呢?
我們在通過urllib包的request.urlopen發送請求時,一直忽略了一個我們不常用到的小參數——context
這個參數有什么用呢?
首先我們打開官方文檔可以看到該參數作用就是用于描述各類SSL參數
那我們該給這個參數填什么值來解決問題呢?
繼續打開上圖中提到的HTTPSConnection相關文檔,我們可以清楚的看到在3.4.3版本時,就可以通過將
ssl._create_unverified_context() 傳遞給context 參數來實現非驗證行為
思路有了,上代碼!
引入ssl包,創建
_create_unverified_context()對象,輕松解決!
from urllib import request,parse
import ssl
import json
url = ""
context = ssl._create_unverified_context()
req = request.Request(url)
res = request.urlopen(req,context=context)