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

python:[Errno 10054]远程主机已强制关闭现有连接,python,twitter,web-crawler,Python,Twitter,Web Crawler,我正在编写python来使用twitterpy抓取Twitter空间。我已经将爬虫程序设置为在每次请求api.twitter.com之间休眠一段时间(2秒)。然而,在运行了几次(大约1次)之后,当Twitter的速率限制还没有超过时,我得到了这个错误 [Errno 10054] An existing connection was forcibly closed by the remote host. 这个问题的可能原因是什么?如何解决 我搜索了一下,发现Twitter服务器本身可能会因为许多

我正在编写python来使用twitterpy抓取Twitter空间。我已经将爬虫程序设置为在每次请求api.twitter.com之间休眠一段时间(2秒)。然而,在运行了几次(大约1次)之后,当Twitter的速率限制还没有超过时,我得到了这个错误

[Errno 10054] An existing connection was forcibly closed by the remote host.
这个问题的可能原因是什么?如何解决

我搜索了一下,发现Twitter服务器本身可能会因为许多请求而强制关闭连接


提前非常感谢。

这可能是由于连接双方在保持连接期间对连接是否超时存在分歧造成的。(您的代码试图在服务器关闭连接时重用该连接,因为它已闲置太长时间。)您基本上应该通过新连接重试该操作。(我很惊讶您的库不会自动执行此操作。)

有许多原因,例如

  • 服务器和客户端之间的网络链路可能暂时中断
  • 正在耗尽系统资源
  • 正在发送格式错误的数据
要详细检查问题,可以使用Wireshark


或者您可以重新请求或重新连接。

对于我来说,此问题是在尝试连接到SAP Hana数据库时出现的。当我遇到这个错误时

OperationalError: Lost connection to HANA server (ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)) 操作错误:与HANA服务器的连接丢失(ConnectionResetError(10054,‘远程主机强制关闭了现有连接’,无,10054,无)) 我尝试运行连接代码(如下所述),这导致了该错误,再次成功

import pyhdb connection = pyhdb.connect(host="example.com",port=30015,user="user",password="secret") cursor = connection.cursor() cursor.execute("SELECT 'Hello Python World' FROM DUMMY") cursor.fetchone() connection.close() 导入pyhdb connection=pyhdb.connect(host=“example.com”,port=30015,user=“user”,password=“secret”) cursor=connection.cursor() execute(“从DUMMY中选择“Hello Python World”) cursor.fetchone() 连接。关闭()
这是因为服务器拒绝连接。这可能需要您等待一段时间,然后重试。尝试关闭Hana Studio,方法是注销,然后再次登录。继续运行代码多次。

我知道这是一个非常老的问题,但可能需要设置请求头。这为我解决了问题

例如“用户代理”、“接受”等。以下是用户代理的示例:

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)

我也有同样的问题。使用瓶子库,并使用httplib发送。我无法真正发送重试,因为原始调用已在服务器上执行。当我尝试读取响应数据时,连接已关闭。这种情况并非总是发生,通常是在我向服务器发送垃圾邮件请求时。你知道我可以调整哪些参数使通信稳定吗?@RomanHwang你需要一种方法来检查上一个操作而不重复它,或者你需要进行操作。谢谢你的提示。我还找到了我经常出错的原因。这是因为瓶子默认开发服务器的实现。它是单线程的,不适合一次处理太多的请求。你能添加一些详细信息吗?额外详细信息:想象一下编写一个爬虫来轮询twitter,由于爬虫不是浏览器,默认情况下它不会有用户代理。因此,该网站说,请欺骗我们,让我们认为您使用的是一款具有既定用户代理设置的真实浏览器,如Mozilla、AppleWebKit、Chrome等浏览器。请回答另一个问题。你知道Windows10在哪里存储连接字符串吗?我以为它是在C:\Users\User Name\AppData\Roaming\Microsoft\MicrosoftSQL\u Server\\110\Tools\Shell\RegServer.xml中(当然这是用于SQL Server的)