前幾天pip的SSL認證完成後,SSLeError的SSL相關錯誤(8,' EOF發生在暴力協議(_ SSL。c:1129)’)出現在使用請求庫請求HTTPS網站時。
經過壹系列的查詢和測試,發現原因是python自帶的urllib庫沒有正確配置HTTPS代理。
上面提到的HTTP(S)代理,其實就是通過代理服務器轉發HTTP(S)流量的意思,也是上圖中黃線表示的協議,在本文後面會簡稱為導出協議。
其實和代理服務器通信也需要壹個協議,就是上圖中的綠線,本文後面用入口協議來指代。
但是HTTP和Socks4/Socks5是常用的入口協議,很少使用HTTPS作為與代理服務器的連接協議,這也是之前報錯的主要原因。
因此,進口協議和出口協議之間實際上不存在因果關系。以CFW為例。
其入口協議支持設置目錄中的ProxyServer配置代理服務器地址端口以及ProxyEnable是否啟用代理。
當CFW配置代理服務器時,它只給出地址和端口,而不給出入口協議。
根據上面給出的urllib庫的源邏輯,代理將被配置如下
導致pip、requests等上層包在訪問HTTPS網站時會錯誤地使用HTTPS的代理://127.0.0.1: 7890,而CFW根本不支持HTTPS的入口協議,所以才會出現這樣壹系列的錯誤。
個人建議大家可以根據自己常用工具支持的入口協議修改urllib庫的源碼邏輯(文件位置壹般是* */Python3。*/urllib/request.py或* */anaconda 3/lib/URL lib/request . py)。
或者簡單地以下面的方式修改它(不壹定在所有情況下都適用)