Python 重试直到我得到
我正在构建一个调用API的web应用程序。我目前使用的API有一个重生时间,可能不是正确的210秒 请求中的API调用为:Python 重试直到我得到,python,django,http,response,python-requests,Python,Django,Http,Response,Python Requests,我正在构建一个调用API的web应用程序。我目前使用的API有一个重生时间,可能不是正确的210秒 请求中的API调用为: r = requests.post(url ,headers=headers, auth=auth, data=json.dumps(data)) 调用后,r可以等于或。我想运行这个API调用,直到它返回一个。是什么格式的 我当前的循环如下。有更好的方法吗 while True: r = requests.post(url ,headers=headers, au
r = requests.post(url ,headers=headers, auth=auth, data=json.dumps(data))
调用后,r可以等于或。我想运行这个API调用,直到它返回一个。是什么格式的
我当前的循环如下。有更好的方法吗
while True:
r = requests.post(url ,headers=headers, auth=auth, data=json.dumps(data))
if (r == '<Response [200]>'): break
您将repr输出与对象混淆
响应对象有一个针对以下内容的测试:
if r.status_code == 200:
break
然而,反复敲打一个服务直到它给出200个响应,很可能会阻止你的IP地址。内置某种类型的API,以防止破坏API。您将repr输出与对象混淆
响应对象有一个针对以下内容的测试:
if r.status_code == 200:
break
然而,反复敲打一个服务直到它给出200个响应,很可能会阻止你的IP地址。内置某种类型的API以防止破坏API。我刚刚分享了一个解决方案,这里可能值得重复 您可以尝试使用请求HTTPAdapter。类似于以下的方法应该可以工作:
import time
import httplib
import requests
from requests.adapters import HTTPAdapter
class RetryHTTPAdapter(HTTPAdapter):
SECONDS_BETWEEN_RETRIES = 5
def __init__(self, retry_time=120, *args, **kwargs):
self.retry_time = retry_time
super(RetryHTTPAdapter, self).__init__(*args, **kwargs)
def send(self, *args, **kwargs):
for _ in range(int(self.retry_time / self.SECONDS_BETWEEN_RETRIES)):
response = super(RetryHTTPAdapter, self).send(*args, **kwargs)
if response.status_code == httplib.OK:
break
time.sleep(self.SECONDS_BETWEEN_RETRIES)
return response
s = requests.Session()
s.mount('http://', RetryHTTPAdapter(retry_time=180))
s.mount('https://', RetryHTTPAdapter(retry_time=180))
s.get('http://example.com')
我刚刚分享了一个可能值得在此重复的解决方案 您可以尝试使用请求HTTPAdapter。类似于以下的方法应该可以工作:
import time
import httplib
import requests
from requests.adapters import HTTPAdapter
class RetryHTTPAdapter(HTTPAdapter):
SECONDS_BETWEEN_RETRIES = 5
def __init__(self, retry_time=120, *args, **kwargs):
self.retry_time = retry_time
super(RetryHTTPAdapter, self).__init__(*args, **kwargs)
def send(self, *args, **kwargs):
for _ in range(int(self.retry_time / self.SECONDS_BETWEEN_RETRIES)):
response = super(RetryHTTPAdapter, self).send(*args, **kwargs)
if response.status_code == httplib.OK:
break
time.sleep(self.SECONDS_BETWEEN_RETRIES)
return response
s = requests.Session()
s.mount('http://', RetryHTTPAdapter(retry_time=180))
s.mount('https://', RetryHTTPAdapter(retry_time=180))
s.get('http://example.com')
正如你所知,我在你的问题中将提到Django改为请求。你问的问题与你用来打电话的图书馆有关。我不确定Django在这里起到了什么作用,可能是您调用的API使用了Django,或者您的代码作为Django应用程序的一部分运行,但您的问题实际上是关于请求库如何工作的。正如您所知,我在您的问题中将Django改为请求。你问的问题与你用来打电话的图书馆有关。我不确定Django在这里起到了什么作用,可能是您调用的API使用了它,或者您的代码作为Django应用程序的一部分运行,但您的问题实际上是关于请求库是如何工作的。我在阅读此答案时晚了大约5分钟。是的,我敲定了这个系统。谢谢你的回复。我需要找到一种方法,让时间延迟60秒loop@IdeoREX:time.sleep60,但这对网络不太友好。使用一个异步任务,通过增加芹菜的间隔来重新安排自己。我在阅读这个答案时晚了大约5分钟。是的,我敲定了这个系统。谢谢你的回复。我需要找到一种方法,让时间延迟60秒loop@IdeoREX:time.sleep60,但这对网络不太友好。使用一个异步任务,该任务可能会使用芹菜,以增加的间隔重新安排自己。