2017-08-24 3 views
1

Im en utilisant requests.post avec les procurations aléatoires comme ceci:Comment faire une nouvelle tentative de connexion via un autre proxy en utilisant les requêtes 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 

Je dois utiliser après avec des chaussettes aléatoires et une nouvelle tentative s'il y a une erreur liée à la procuration, jusqu'à ce qu'il soit terminé. Comme je comprends: besoin de boucle d'événement avec poste, vérifier s'il y a un délai d'attente ou une autre erreur de proxy et réessayez poste jusqu'à ce qu'il soit terminé. Comment je peux le faire?

+0

Je dois le faire sans utiliser plusieurs variables dans la variable socks – Dyniz

Répondre

0

sans aucun contrôle:

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

cela devrait le faire, mais je ne suis pas sûr de ce que les chaussettes = "{ "http": "random_socks()" }" devrait dire que je suppose que random_socks() est une fonction si l'appel doit être différent

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

random_socks() devrait retourner 1 proxy http pas une liste. Il devrait être appelé dans la boucle afin que le proxy serait tout le temps récupéré ..

Si je voulais savoir est en train de se produire, j'aurais une liste de ces proxies de chaussettes et je bouclerais sur eux je pourrais enregistrer lequel J'utilise

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

Vous comprenez bien, de vérifier les erreurs dans requests.post puis réessayer avec un autre proxy s'il y a une erreur de proxy. Par exemple utiliser la récursivité:

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)