python: [Errno 10054] 远程主机强制关闭了现有连接

78 投票
7 回答
287517 浏览
提问于 2025-04-17 09:58

我正在用Python编写一个程序,目的是抓取Twitter上的空间信息,使用的是Twitter-py这个库。我设置了这个程序在每次请求api.twitter.com之间要暂停一会儿(2秒)。但是,运行了一段时间(大约1小时)后,即使还没有超过Twitter的请求限制,我也遇到了一个错误。

[Errno 10054] An existing connection was forcibly closed by the remote host.

这个问题可能是什么原因造成的,应该怎么解决呢?

我查了一下,发现Twitter的服务器可能会因为请求太多而强制关闭连接。

非常感谢你的帮助!

7 个回答

14

出现问题的原因有很多,比如:

  • 服务器和客户端之间的网络连接可能暂时中断。
  • 系统资源可能用完了。
  • 发送的数据格式可能不正确。

要详细检查这个问题,你可以使用Wireshark这个工具。

或者你也可以尝试重新请求或者重新连接一下。

15

我知道这个问题很老旧,但你可能需要设置请求头。这对我来说解决了问题。

比如说 'user-agent'、'accept' 等等,这里有一个关于 user-agent 的例子:

url = 'your-url-here'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
r = requests.get(url, headers=headers)
28

这个问题可能是因为连接的两边对连接是否超时有不同的看法。在保持连接活跃的过程中,可能你的代码正好在服务器关闭连接的时候尝试重用这个连接,因为它已经闲置太久了。简单来说,你应该尝试在一个新的连接上重新执行这个操作。(我很惊讶你的库没有自动处理这个问题。)

撰写回答