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