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 中中止