Python 会话 10054 连接中止错误

Posted

技术标签:

【中文标题】Python 会话 10054 连接中止错误【英文标题】:Python Session 10054 Connection Aborted Error 【发布时间】:2016-12-07 13:52:37 【问题描述】:

我使用 requests 模块编写了一个网络爬虫。我打开一个会话并使用此会话发送后续请求。它有两个阶段。

1) 逐页抓取并将 id 收集到一个数组中。 2) 使用对同一主机上的 ajax 服务器的请求获取数组中每个 id 的详细信息。

刮板在我的 Linux 机器上运行良好。但是,当我在 Windows 10 上运行机器人时,阶段 1 完成得很好,但是在阶段 2 中的几个请求之后,python 抛出了这个异常

文件“c:\python27\lib\site-packages\requests\adapters.py”,第 453 行,在发送中 引发 ConnectionError(错误,请求=请求) ConnectionError: ('Connection aborted.', error(10054, 'Varolan bir ba\xf0lant\xfd uzaktaki bir ana bilgisayar taraf\xfdndan zorla kapat\xfdld'))

导致这种情况的两个操作系统有什么不同?我该如何克服这个问题?

使用重试模块修改我的请求代码(如下所示)没有任何积极影响。现在脚本不会抛出异常,而只是挂起什么都不做。

@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=7)
def doReq(self, url):
    time.sleep(0.5)
    response = self.session.get(url, headers=self.headers)
    return response

【问题讨论】:

【参考方案1】:

我仍然不知道为什么这个问题只出现在 Windows 中。但是,重试装饰器似乎已经解决了套接字错误的问题。脚本挂起的原因是服务器没有响应请求。默认情况下,请求模式会永远等待响应。通过添加超时值,请求会引发超时异常,并且重试装饰器会捕获它并再次尝试。我知道这是一种变通方法,而不是一种解决方案,但这是我目前所拥有的最好的。

【讨论】:

以上是关于Python 会话 10054 连接中止错误的主要内容,如果未能解决你的问题,请参考以下文章

windows socket error: 远程主机强迫关闭了一个现有的连接。(10054),on API 'recv

如果客户端关闭会话,nodejs v8.11.3 使用 TLS 在 http2 中中止

当我使用 assignTaxonomy 时 R 会话中止

远程GDB会话“命令已中止”

Mailchimp python 包装器给出错误 - 没有会话

当用户中止我的脚本时,cURL会话会发生什么?