報錯信息:HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: BAD_ECPOINT] bad ecpoint (_ssl.c:1000)')))
SSLError通常是在使用HTTPS協(xié)議進(jìn)行網(wǎng)絡(luò)請求時遇到的,它表明SSL握手過程中出現(xiàn)了問題部逮。我通過以下的兩個步驟解決SSL錯誤:
-
添加自定義User-Agent:
- 某些服務(wù)器可能會根據(jù)請求的User-Agent來決定是否允許訪問楣责。如果服務(wù)器檢測到請求來自一個未知或不受信任的User-Agent爷贫,它可能會拒絕連接飒赃。通過設(shè)置一個標(biāo)準(zhǔn)的User-Agent匀们,如
headers = {'User-Agent': 'Mozilla/5.0 (compatible; YourBot/0.1)'}
,可以模仿一個常見的瀏覽器或爬蟲洽蛀,從而減少被服務(wù)器拒絕的可能性耙蔑。
- 某些服務(wù)器可能會根據(jù)請求的User-Agent來決定是否允許訪問楣责。如果服務(wù)器檢測到請求來自一個未知或不受信任的User-Agent爷贫,它可能會拒絕連接飒赃。通過設(shè)置一個標(biāo)準(zhǔn)的User-Agent匀们,如
-
將URL從HTTPS更改為HTTP:
- HTTPS是HTTP的安全版本见妒,它使用SSL/TLS協(xié)議來加密客戶端和服務(wù)器之間的通信。如果遇到SSL錯誤甸陌,將URL從HTTPS更改為HTTP意味著你放棄了SSL/TLS加密须揣,直接使用不加密的HTTP協(xié)議進(jìn)行通信。這樣做可以避免SSL握手過程中可能出現(xiàn)的問題钱豁,但這會降低數(shù)據(jù)傳輸?shù)陌踩猿芸ǎ驗(yàn)镠TTP不提供加密保護(hù)。
然而牲尺,需要注意的是卵酪,僅僅因?yàn)楦腢RL為HTTP可以避免SSL錯誤,并不意味著這是一個好的解決方案谤碳。使用HTTP而不是HTTPS會使得數(shù)據(jù)傳輸過程中的敏感信息容易受到中間人攻擊溃卡。因此,通常建議尋找其他方法來解決SSL錯誤蜒简,例如更新SSL庫瘸羡、使用正確的證書、或者確保服務(wù)器配置正確搓茬。
如果你正在編寫爬蟲或自動化腳本犹赖,并且遇到SSL錯誤队他,你可能需要檢查以下幾點(diǎn):
- 確保你的環(huán)境(如Python和requests庫)是最新的。
- 檢查是否有可用的更新或補(bǔ)丁來解決SSL庫的問題峻村。
- 確保服務(wù)器的SSL證書是有效的漱挎,并且沒有過期。
- 如果可能雀哨,嘗試使用不同的User-Agent或添加其他headers來模擬瀏覽器行為。
- 考慮使用更高級的庫私爷,如
urllib3
雾棺,它提供了更多的SSL/TLS配置選項(xiàng)。
最后衬浑,如果你正在處理敏感數(shù)據(jù)捌浩,強(qiáng)烈建議不要使用HTTP,而是尋找解決SSL錯誤的方法工秩,以保持通信的安全性尸饺。
其他參考資料如下:
https://blog.csdn.net/graceljh/article/details/100163814
https://baijiahao.baidu.com/s?id=1782774393060717153&wfr=spider&for=pc
http://www.reibang.com/p/3ebe136b6f75
1.安裝三個安裝包
pip install cryptography
pip install pyOpenSSL
pip install certifi
2.導(dǎo)入urllib3包
import urllib3
urllib3.disable_warnings() #這個添加在 requests.get(‘http://xxx.com/’, headers = header, verify=False)上面
https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
3.關(guān)閉證書驗(yàn)證在requests.get加入verify=False
response = requests.get(‘http://xxx.com/’, headers = header, verify=False)
4. 創(chuàng)建不驗(yàn)證服務(wù)器證書的HTTPS上下文
import ssl
import requests
# 創(chuàng)建一個不驗(yàn)證服務(wù)器證書的HTTPS上下文
context = ssl._create_unverified_context()
# 使用上下文發(fā)起HTTPS請求(不安全,不推薦在生產(chǎn)環(huán)境中使用)
response = requests.get('https://example.com', verify=False)
print(response.text)
5.添加User-Agent
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Connection':'close' #沒有影響
}
獲取當(dāng)前瀏覽器訪問某網(wǎng)頁所使用的User-Agent:
- 瀏覽器的JavaScript控制臺
- 打開你想要檢查User-Agent的網(wǎng)頁
- 按F12鍵或右鍵選擇“檢查”(Inspect)來打開開發(fā)者工具助币。
- 切換到“控制臺”(Console)標(biāo)簽頁浪听。
- 在控制臺中輸入以下代碼并按Enter鍵執(zhí)行:
var userAgent = window.navigator.userAgent;
console.log(userAgent);
#執(zhí)行結(jié)果
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36