如何使用python请求通过另一个代理进行重试连接?

如何使用python请求通过另一个代理进行重试连接?,python,python-requests,socks,Python,Python Requests,Socks,Im使用requests.post和以下随机代理: url = "http://localhost" socks = "{ "http": "random_socks()" }" payload = { "status" : "1" } headers = { "user-agent" : "useragent"} post = requests.post(url, payload=json.dumps(payload), headers=headers, proxies=socks) pr

Im使用requests.post和以下随机代理:

url = "http://localhost"
socks = "{ "http": "random_socks()" }"
payload = { "status" : "1" }
headers = { "user-agent" : "useragent"}

post = requests.post(url, payload=json.dumps(payload), headers=headers, proxies=socks)

print post.text
我需要将post与随机socks一起使用,并在出现代理相关错误时重试,直到完成

据我所知:需要用post循环事件,检查是否有超时或其他代理错误,然后重试post,直到它完成。 如何操作?

无需任何检查:

retries = 5
post = None
for i in range(retries):
    try:
        post = requests.post(url, payload=json.dumps(payload), 
                             headers=headers, proxies=socks)
        print(post.text)
        break
    except:
        pass
    time.sleep(xxx)
else:
    print('no fetch')
这应该可以做到,但我不确定socks=
“{”http:“random_socks()”}“
应该是什么意思,我猜
random_socks()
是一个函数,所以调用应该不同

post = requests.post(url, payload=json.dumps(payload), 
                     headers=headers, proxies={"http": random_socks()}) 
random\u socks()
应返回1个http代理,而不是列表。应该在循环中调用它,以便始终重新蚀刻代理

如果我想知道实际发生了什么,我会有一个socks代理的列表,我会循环它们,我可以记录我使用的是哪一个

for each_proxy in list_of_proxies:
    try:
        post = requests.post(url, payload=json.dumps(payload), 
                             headers=headers, proxies={'http':each_proxy } )
        print(post.print)
        break
    except:
        time.sleep(1)
else:
    print('no data')

您的理解是正确的,请检查
请求中的错误。发布
,如果存在代理错误,请使用另一个代理重试。例如,使用递归:

from requests.exceptions import ProxyError

def post_proxy(url, payload, headers):
    try:
        post = requests.post(url, payload=json.dumps(payload), headers=headers, 
                             proxies={"http": random_socks()})
        return post.text
    except ProxyError:
        return post_proxy(url, payload, headers)

url = "http://localhost"
payload = {"status": "1"}
headers = {"user-agent": "useragent"}
print post_proxy(url, payload, headers)

我需要在不使用socks变量中的多个代理的情况下执行此操作