【问题标题】:requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection ')) in python request.apirequests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection')) 在 python request.api
【发布时间】:2020-12-01 16:22:54
【问题描述】:
import requests

resp = requests.api.post(url,headers=self.headers,data=json.dumps(data))

在 jenkins 中运行时,有时运行良好,但在其他情况下却报错

requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

【问题讨论】:

  • 我之前也遇到过同样的错误!我想可能是服务器?

标签: python-3.x python-requests


【解决方案1】:

您的.post() 呼叫是正确的。

服务器已损坏和/或您的数据格式不正确,因此会导致服务器出现损坏的行为。 (我希望来自服务器的 400500。)

验证 TCP/IP 连接是否良好,例如$ telnet host 443

验证data 的长度是否合理——发送千兆字节不会让你开心。

编辑

现在您说这是确定性行为:第一次有效,第二次失败。 这表明连接缓存是相关的。 requests 模块维护一个与 web 服务器的开放 TCP 连接池,以防另一个请求很快到达。

也许你发布了,服务器说201 Created 或其他, 表示客户端应该在读取状态时关闭连接。 但是客户端没有关闭连接, 并且惊讶地发现在同一连接上尝试第二次 POST 时服务器端已关闭。

你正在跑步:

resp = requests.api.post(url, ...)

你可以改用:

sess = requests.Session()
resp = sess.post(url, ...)

然后您就可以控制何时丢弃会话连接池并创建一个新连接池。

【讨论】:

  • 但它一次对相同的数据工作正常,并在其他时间使连接中止。
  • 我已经实现了这个,但我仍然面临上述连接中止的问题,有没有其他方法可以克服
  • 您尚未确定服务器为何如此行事。如果不诊断根本原因,对客户端行为进行随机更改不太可能改善问题。提高两端的日志级别。使用wireshark查看http详细信息。
猜你喜欢
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多