请求发布时出现 Python 错误:'连接中止,超时('写入操作超时')

2023-12-31

我正在使用 requests post 发送一些数据,现在我已经设置了超时值requests.post类似的东西60。其他类似的问题与特定的应用程序相关,所以我想将其作为通用的 python 错误来问。

这是我得到的错误:

failed to connect  ('Connection aborted.', timeout('The write operation timed out'))

我认为这是因为由于某种原因我的线程无法及时发送所有数据,但我不确定。所以我有以下问题:

  1. 发生这个错误是因为线程无法在超时时间内发送出所有数据吗?

  2. 如果是这样,我是否可以以仅在发送所有数据后才开始的方式设置超时?我不想永远等待服务器响应,但显然我希望计时器在发送所有数据时启动,而不是在函数调用开始时启动。 (并且我发送的数据大小各不相同)


如果您正在使用python请求库 https://pypi.org/project/requests/,您可以将“timeout”参数指定为元组。第一个元素是“连接超时”,第二个元素是“读取超时”。

requests.get('http://google.com', timeout=(10,200) # give it 10 seconds to connect to the server, and timeout if server does not send any data back for 200+ seconds

requests 在底层使用 urrlib3.util.Timeout 。根据 urllib3 文档 https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html,将读取超时设置为 None 将永远等待服务器响应。但是,我同意永远等待是一个坏主意。

您在请求中发送了多少数据?我通读了一些 python 请求代码,但找不到一种简单的方法来检测请求何时完成发送。

作为概念证明我写了这段代码 https://github.com/GrantGMiller/request_with_event基于urequests(微请求) https://github.com/micropython/micropython-lib/blob/master/urequests/urequests.py

它允许您将回调函数传递给 requests.get()。该回调将在所有请求数据发送后、服务器接收到任何数据之前触发。

import time

def sent_callback():
    print('The request has finished sending at', time.time())

resp = get('http://google.com', send_callback=sent_callback)
print('response received at', time.time())

print('resp.text=', resp.text)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请求发布时出现 Python 错误:'连接中止,超时('写入操作超时') 的相关文章

随机推荐