使用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種可能:
- http連接太多沒有關閉導致的。
- 機器的內存不夠了。
- 還有一種可能就是:由於請求頻率過快,被目標網站封IP了
- 請求的 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 )