2017-08-24 40 views
1

即时通讯使用requests.post随机代理这样的:如何使用python请求通过另一个代理重试连接?

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 

我需要使用后随机袜子,然后重试,如果有一些代理相关的错误,直到它完成。

据我所知:需要循环事件后,检查是否有超时或其他代理错误,并重试后,直到它会完成。 我该怎么做?

+0

我需要这样做,而不使用多个代理在socks变量 – Dyniz

回答

0

没有任何检查:

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') 

这应该这样做,但我不知道"{ "http": "random_socks()" }"是什么意思。袜=我想这random_socks()是一种功能,使通话应该是不同的

post = requests.post(url, payload=json.dumps(payload), 
        headers=headers, proxies={"http": random_socks()}) 

random_socks()应该返回1 http代理不是一个列表。它应该在循环中调用,以便代理将始终重新编辑。

如果我想知道实际发生的情况,我将列出这些袜子代理,然后我将它们循环,以便记录哪一个我使用

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') 
0

你的理解对不对,检查错误,在requests.post,然后用另一个代理重试,如果有一个代理的错误。例如使用递归:

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) 
相关问题