Max retries exceeded with url--问题解决方案

使用requests库请求url,会出现这个错误(

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='XXXXXX', 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 地址错误
  5. 电脑端开启了 抓包工具,请求没有正确的被代理,所以出现了该错误-----------关闭抓包工具就可以了

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 )

 

posted on 2021-08-19 17:47  ClareBaby01  阅读(24420)  评论(0编辑  收藏  举报