如何使用 python 请求重试通过另一个代理连接?
How to make retry connecting through another proxy using python requests?
我正在使用 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
我需要使用 post 和随机袜子,如果出现一些与代理相关的错误,我会重试,直到完成。
据我了解:需要使用 post 循环事件,检查是否存在超时或其他代理错误并重试 post 直到完成。
我该怎么做?
没有任何检查:
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')
应该这样做,但我不确定 socks = "{ "http": "random_socks()" }"
应该是什么意思我猜 random_socks()
是一个函数,所以调用应该不同
post = requests.post(url, payload=json.dumps(payload),
headers=headers, proxies={"http": random_socks()})
random_socks()
应该 return 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)
我正在使用 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
我需要使用 post 和随机袜子,如果出现一些与代理相关的错误,我会重试,直到完成。
据我了解:需要使用 post 循环事件,检查是否存在超时或其他代理错误并重试 post 直到完成。 我该怎么做?
没有任何检查:
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')
应该这样做,但我不确定 socks = "{ "http": "random_socks()" }"
应该是什么意思我猜 random_socks()
是一个函数,所以调用应该不同
post = requests.post(url, payload=json.dumps(payload),
headers=headers, proxies={"http": random_socks()})
random_socks()
应该 return 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)