解决requests.get/post报错Failed to establish a new connection: [WinError 10060]

requests报错

  • 1 完整报错代码
  • 2 报错分析
  • 3 解决办法

1 完整报错代码

url,url,"HTTPConnectionPool(host='47.121.2.122', port=8718): Max retries exceeded with url: /project/tender/sync (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] �������ӷ���һ��ʱ���û����ȷ�����ӵ�����û�з�Ӧ�����ӳ���ʧ�ܡ�'))",2020-06-18 14:38:49

解决requests.get/post报错Failed to establish a new connection: [WinError 10060]_第1张图片

2 报错分析

  报错情景是采用多线程,设置好了请求头后,往某个api丢入大量数据,40w条数据,存储过程中大概漏了6,700条。一开始我以为是后台吃不消,于是看了后台日志,发现后台并没有相关的报错代码,所以断定报错只是发生在本地,且代码中的错误也提示了与目标ip建立连接失败,所以…
  报这个错误的最容易发现的原因之一是 路由错误,但是此处路由是没有问题的,所以这个错误可以先排除;
  从最初的代码入手

headers = {"Content-Type": "application/json",
                       "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",}
resp = requests.post(url="略过",
                                headers=headers,
                                data=json.dumps(dict(item)),
                                )

  每请求一次,发起一个请求连接,占用一定的连接资源,在多线程的情况下,短时间内发起请求过多,若不能及时断开且释放相应资源,HTTPConnectionPool中资源不够,其他连接就可能无法建立,导致数据丢失。

3 解决办法

  在请求头中加入"Connection": “close”
即:

    headers = {"Content-Type": "application/json",
                       "user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
                       "Connection": "close"}

后面存另一批数据的时候,没有数据丢失

你可能感兴趣的:(爬虫Web)