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