Max retries exceeded with url--問題解決方案


使用requests庫請求url,會出現這個錯誤(

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='cws-qa-internal.cyy928.com', port=80): Max retries exceeded with url: /signin (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001F99F58D688>: Failed to establish a new connection: [WinError 10061] 由於目標計算機積極拒絕,無法連接。'))

1. 錯誤出現的原因:

服務器負載過重,無法建立更多的鏈接,4種可能:

  1. http連接太多沒有關閉導致的。
  2. 機器的內存不夠了。
  3. 還有一種可能就是:由於請求頻率過快,被目標網站封IP了
  4. 請求的 url 地址錯誤

2. 解決方案:

  1. 增加重試連接次數 requests.adapters.DEFAULT_RETRIES = 5

  2. 關閉多余的連接 requests使用了urllib3庫,默認的http connection是keep-alive的,requests設置False關閉。 操作方法: s = requests.session() s.keep_alive = False

  3. 中間有很多嘗試解決的步驟,這里不再贅述,只奉上最終的解決方案,在發起get或者post請求時,設置Connection屬性為close,而非keep-alive,如:httpGet.setHeader("Connection","close");,這是由我們的業務場景決定的,爬蟲任務對於一個URL只需要請求一次,我們在請求完成后理解關閉連接,客戶端就不需要一直維持這個連接了。進行如此設置后,再查看文件句柄,發現沒有了close_wait狀態的網絡連接,大功告成。

  4. 檢查請求頭中的host值是否配置對了,如果配置錯了,也會出現連接不上的情況

  以上四種解決方法,試了第一和第二,其實不管用;然后后來修改了 3 和4,才解決了問題的 ,附帶http請求頭中的host字段的作用(https://blog.csdn.net/cxy1991xm/article/details/102997349 )

 


免責聲明!

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



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