python: [Errno 10054] 现有连接被远程主机强行关闭
Posted
技术标签:
【中文标题】python: [Errno 10054] 现有连接被远程主机强行关闭【英文标题】:python: [Errno 10054] An existing connection was forcibly closed by the remote host 【发布时间】:2012-02-07 13:04:58 【问题描述】:我正在编写 python 来使用 Twitter-py 抓取 Twitter 空间。我已将爬虫设置为在对 api.twitter.com 的每个请求之间休眠一段时间(2 秒)。但是,在运行了一段时间后(大约 1 次),当 Twitter 的速率限制还没有超过时,我得到了这个错误。
[Errno 10054] An existing connection was forcibly closed by the remote host.
这个问题的可能原因是什么以及如何解决这个问题?
我搜索了一下,发现Twitter服务器本身可能会因为请求太多而强制关闭连接。
非常感谢您。
【问题讨论】:
【参考方案1】:这可能是由于连接的两端在保持活动期间连接是否超时而产生分歧。 (您的代码尝试重用连接,就像服务器关闭它一样,因为它已经空闲太久了。)您基本上应该通过新连接重试操作。 (我很惊讶您的图书馆不会自动执行此操作。)
【讨论】:
我也有同样的问题。使用瓶子库,并使用 httplib 发送。我无法真正发送重试,因为原始调用已在服务器上执行。当我尝试读取响应数据时,连接已关闭。这种情况并非一直发生,通常是当我只是向服务器发送垃圾邮件请求时。您知道我可以调整哪些参数以使通信稳定吗? @RomanHwang 你要么需要一种方法来检查之前的操作而不重复它,要么你需要让你的操作idempotent。 感谢您的提示。我还发现了为什么我经常收到错误的原因。这是因为瓶子的默认开发服务器的实现。它是单线程的,不适合一次处理太多的请求。【参考方案2】:原因有很多,比如
服务器和客户端之间的网络链接可能暂时断开。 系统资源不足。 发送格式错误的数据。要详细检查问题,可以使用 Wireshark。
或者您可以重新请求或重新连接。
【讨论】:
【参考方案3】:我知道这是一个非常古老的问题,但您可能需要设置请求标头。这为我解决了。
例如 '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)
【讨论】:
你能补充一些细节吗? 额外细节: 想象一下编写一个爬虫来轮询 twitter,由于爬虫不是浏览器,它默认没有用户代理。所以网站说请欺骗我们,让我们误以为您使用的是具有已建立用户代理设置的真实浏览器,例如 Mozilla、AppleWebKit、Chrome 等浏览器。【参考方案4】:对我来说,这个问题是在尝试连接到 SAP Hana 数据库时出现的。当我收到此错误时,
OperationalError: Lost connection to HANA server (ConnectionResetError(10054, 'An现有连接被远程主机强行关闭', None, 10054, None))
我尝试运行连接代码(如下所述),它再次创建了该错误并且它工作。
导入pyhdb 连接 = pyhdb.connect(host="example.com",port=30015,user="user",password="secret") 游标 = 连接。游标() cursor.execute("SELECT 'Hello Python World' FROM DUMMY") cursor.fetchone() 连接.close()这是因为服务器拒绝连接。它可能需要您等待一段时间,然后重试。尝试通过注销然后重新登录来关闭 Hana Studio。多次运行代码。
【讨论】:
请单独提问。你有没有机会知道 Windows10 存储连接字符串的位置?我以为它在 C:\Users\User-Name\AppData\Roaming\Microsoft\MicrosoftSQL_Server\\110\Tools\Shell\RegServer.xml (当然,这是用于 SQL Server)以上是关于python: [Errno 10054] 现有连接被远程主机强行关闭的主要内容,如果未能解决你的问题,请参考以下文章
python socket.error: [Errno 10054] 解决方法
python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054
Python异常:ConnectionError 10054远程主机强制关闭现有连接