Как сделать попытку повторного подключения через другой прокси с использованием запросов 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)