Requests 可以為 HTTPS 請(qǐng)求驗(yàn)證 SSL 證書,就像 web 瀏覽器一樣。SSL 驗(yàn)證默認(rèn)是開啟的,如果證書驗(yàn)證失敗,Requests 會(huì)拋出 SSLError:
>>> requests.get('https://requestb.in')
requests.exceptions.SSLError: hostname 'requestb.in' doesn't match either of '*.herokuapp.com', 'herokuapp.com'
在該域名上我沒有設(shè)置 SSL,所以失敗了。但 Github 設(shè)置了 SSL:
>>> requests.get('https://github.com', verify=True)
<Response [200]>
你可以為 ?verify
? 傳入 CA_BUNDLE 文件的路徑,或者包含可信任 CA 證書文件的文件夾路徑:
>>> requests.get('https://github.com', verify='/path/to/certfile')
或者將其保持在會(huì)話中:
s = requests.Session()
s.verify = '/path/to/certfile'
注解
如果 ?verify
? 設(shè)為文件夾路徑,文件夾必須通過 OpenSSL 提供的 c_rehash 工具處理。
你還可以通過 ?REQUESTS_CA_BUNDLE
? 環(huán)境變量定義可信任 CA 列表。
如果你將 ?verify
? 設(shè)置為 False,Requests 也能忽略對(duì) SSL 證書的驗(yàn)證。
>>> requests.get('https://kennethreitz.org', verify=False)
<Response [200]>
默認(rèn)情況下, ?verify
? 是設(shè)置為 True 的。選項(xiàng) ?verify
? 僅應(yīng)用于主機(jī)證書。
# 對(duì)于私有證書,你也可以傳遞一個(gè) CA_BUNDLE 文件的路徑給 ?verify
?。你也可以設(shè)置 # ?REQUEST_CA_BUNDLE
? 環(huán)境變量。
更多建議: