【Python爬蟲】requests.exceptions.SSLError: HTTPSConnectionPool問題

報(bào)錯信息: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ò)請求時(shí)遇到的,它表明SSL握手過程中出現(xiàn)了問題。我通過以下的兩個(gè)步驟解決SSL錯誤:

  1. 添加自定義User-Agent:

    • 某些服務(wù)器可能會根據(jù)請求的User-Agent來決定是否允許訪問。如果服務(wù)器檢測到請求來自一個(gè)未知或不受信任的User-Agent,它可能會拒絕連接。通過設(shè)置一個(gè)標(biāo)準(zhǔn)的User-Agent,如headers = {'User-Agent': 'Mozilla/5.0 (compatible; YourBot/0.1)'},可以模仿一個(gè)常見的瀏覽器或爬蟲,從而減少被服務(wù)器拒絕的可能性。
  2. 將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錯誤,并不意味著這是一個(gè)好的解決方案。使用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.itdecent.cn/p/3ebe136b6f75

1.安裝三個(gè)安裝包

pip install cryptography
pip install pyOpenSSL
pip install certifi

2.導(dǎo)入urllib3包

import urllib3
urllib3.disable_warnings() #這個(gè)添加在 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)建一個(gè)不驗(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:

  1. 瀏覽器的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

6.直接將 請求鏈接的 https 改為 http

參考資料:http://www.itdecent.cn/p/3ebe136b6f75

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容