Unexpected EOF 遠程主機強迫關閉了一個現有的連接 如何處理


由於數據量的增大,調用接口的次數會增加。

當連續向目標網站發送多次request后,目標網站可能會認為是,惡意攻擊。

於是會拋出requests異常。

測試代碼:

for i in range(200):  # 連續請求200次
    requests.post(p['url'], headers=p['headers'], json=p['body'], verify=False)

在python3.6中,異常為

requests.exceptions.SSLError: HTTPSConnectionPool(host='', port=443): Max retries exceeded with url:  
(Caused by SSLError(SSLError("bad handshake: SysCallError(-1, 'Unexpected EOF')",),))

在python3.7中,異常為

requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, '遠程主機強迫關閉了一個現有的連接。', None, 10054, None))

嘗試百度了不少方法,如time.sleep(1),response.close(),socket.setdefaulttimeout(20)。

要么無效果,要么經不起多次驗證。

既然是異常,那么就try唄。

把異常捕獲,重新請求一次。

在等待異常過程中,變相的time.sleep了。

按照這個思路,寫代碼,驗證,目前來看還是相對靠譜的。

while True:  # 循環
    try:
        r = eval(expression)
    except (requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
        if 'bad handshake' in str(e) or '10054' in str(e):  # 上述2種異常
            continue  # 繼續發請求
        else:
            raise Exception(e)  # 其他異常,拋出來
    break  # 無異常就跳出循環
return r  # 返回響應結果

版權申明:本文為博主原創文章,轉載請保留原文鏈接及作者。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM