2017-08-24 39 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) 
相關問題