2017-08-24 9 views
1

イム:Pythonリクエストを使って別のプロキシ経由で接続を再試行する方法は?このようなランダムなプロキシを使用して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 

私は、ランダムな靴下でポストを使用し、それが完了されるまで、いくつかのプロキシ関連のエラーがある場合は、それを再試行する必要があります。

私が理解しているように、イベントを投稿でループする必要があります。タイムアウトやその他のプロキシエラーがあるかどうかを確認し、完了するまで投稿をやり直してください。 どうすればいいですか?任意のチェックなし

+0

私は、ソックス変数で複数のプロキシを使用せずに行う必要があります – 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()" }"は、私は、コールが

post = requests.post(url, payload=json.dumps(payload), 
        headers=headers, proxies={"http": random_socks()}) 
異なっている必要がありますので random_socks()が関数であることを推測する意味すべきか靴下=わからないんだけど

random_socks()は、httpプロキシではないリストを1つ返します。それはループで呼び出されて、プロキシがいつも再フェッチされるはずです。

私が実際に起こっていることを知りたければ、私はそれらのソックスプロキシのリストを持っています。私はあなたが、右の理解requests.postでエラーをチェックして、プロキシにエラーが発生した場合、別のプロキシを再試行

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

を使用しています。たとえば、再帰を使用します。

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) 
関連する問題