使用库请求发送 POST 请求的问题
Issue with sending POST requests using the library requests
import requests
while True:
try:
posting = requests.post(url,json = data,headers,timeout = 3.05)
except requests.exceptions.ConnectionError as e:
continue
# If a read_timeout error occurs, start from the beginning of the loop
except requests.exceptions.ReadTimeout as e:
continue
a link 更多代码:
此代码使用 requests
库无限期地执行 POST 请求。我注意到当尝试多次失败并且 while 循环多次启动时,当我最终可以发送 post 请求时,我在同一秒从服务器端找到了多个条目。我同时写入一个 txt 文件,它只显示一个条目。每个条目是 5 个读数。这是图书馆本身的问题吗?有没有办法来解决这个问题?!无论我提出什么样的条件,它仍然不起作用:/!
You can notice the reading at 12:11:13 has 6 parameters per second while at 12:14:30 (after the delay, it should be every 10 seconds) it is a few entries at the same second!!! 3 entries that make up 18 readings in one second, instead of 6 only!
看起来服务器收到了您的请求并对其进行了处理,但未能及时响应(3s 是一个非常低的超时,加载 spike/paging 操作很容易使服务器错过它,除非它使用特殊的措施)。我建议
- 异步处理请求(例如生成线程;Asynchronous Requests with Python requests 讨论了使用
requests
执行此操作的方法)并且不使用超时(TCP 有自己的超时,让它失败)。
- reuse the connection(s)(TCP 有相当多的连接开销 establishing/breaking)或改用 UDP。
- 包含一些 "hints"(ID、时间戳等)以防止服务器添加重复记录。 (我将此称为解决方法,因为真正的问题是您不确定您的请求是否得到处理。)
从服务器端,您可能想要:
- 尽快回复并稍后根据信息采取行动。不要让待处理的操作阻止回答进一步的请求。
import requests
while True:
try:
posting = requests.post(url,json = data,headers,timeout = 3.05)
except requests.exceptions.ConnectionError as e:
continue
# If a read_timeout error occurs, start from the beginning of the loop
except requests.exceptions.ReadTimeout as e:
continue
a link 更多代码:requests
库无限期地执行 POST 请求。我注意到当尝试多次失败并且 while 循环多次启动时,当我最终可以发送 post 请求时,我在同一秒从服务器端找到了多个条目。我同时写入一个 txt 文件,它只显示一个条目。每个条目是 5 个读数。这是图书馆本身的问题吗?有没有办法来解决这个问题?!无论我提出什么样的条件,它仍然不起作用:/!
You can notice the reading at 12:11:13 has 6 parameters per second while at 12:14:30 (after the delay, it should be every 10 seconds) it is a few entries at the same second!!! 3 entries that make up 18 readings in one second, instead of 6 only!
看起来服务器收到了您的请求并对其进行了处理,但未能及时响应(3s 是一个非常低的超时,加载 spike/paging 操作很容易使服务器错过它,除非它使用特殊的措施)。我建议
- 异步处理请求(例如生成线程;Asynchronous Requests with Python requests 讨论了使用
requests
执行此操作的方法)并且不使用超时(TCP 有自己的超时,让它失败)。 - reuse the connection(s)(TCP 有相当多的连接开销 establishing/breaking)或改用 UDP。
- 包含一些 "hints"(ID、时间戳等)以防止服务器添加重复记录。 (我将此称为解决方法,因为真正的问题是您不确定您的请求是否得到处理。)
从服务器端,您可能想要:
- 尽快回复并稍后根据信息采取行动。不要让待处理的操作阻止回答进一步的请求。