Как сделать попытку повторного подключения через другой прокси с использованием запросов Python?

Я использую request.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

Мне нужно использовать сообщение со случайными носками и повторить его, если есть какая-либо ошибка, связанная с прокси, до тех пор, пока она не будет завершена.

Как я понимаю: нужно зациклить событие с сообщением, проверить наличие тайм-аута или другой ошибки прокси-сервера и повторить сообщение до его завершения. Как я могу это сделать?

2 ответа

Решение

Без какой-либо проверки:

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

Вы правильно поняли, проверьте ошибки в 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)
Другие вопросы по тегам