所以我使用的是请求模块,但每次发出请求时我都会尝试更改代理(Ex,GET和POST)。我有一个我想要使用的所有代理的字典,但是我无法通过迭代字典获得实际工作的请求。我理解如何使用单个代理发送请求,但同样,我不确定如何在每次请求后更改每个代理。这不是我想写的当前程序,但同样是我想要完成的任务:
BASE_URL = "Some url"
USER_AGENT = "Some user agent"
POST_URL = "Some url"
proxies = {
'https' : 'proxy1',
'https' : 'proxy2',
'https' : 'proxy...'
}
def req():
session = requests.Session()
session.headers = {'user-agent': USER_AGENT}
session.headers.update({'Referer': BASE_URL})
req = session.get(BASE_URL, proxies=curProxy)
session.headers.update({'x-csrftoken': req.cookies['csrftoken']})
login_data = {'DATA HERE'}
login = session.post(POST_URL, data=login_data, allow_redirects=True, proxies=curProxy)
session.headers.update({'x-csrftoken': login.cookies['csrftoken']})
cookies = login.cookies
# For each proxy in proxies
for proxy in proxies:
# Updating the proxy to use
curProxy = proxy
req()
感谢所有提前回复的人。非常感谢所有帮助/输入!
答案 0 :(得分:1)
您的代理不需要字典。使用简单列表:
proxies = ['proxy1', 'proxy2', ...]
更改您的函数req
以接受代理作为参数。全局变量是邪恶的:)
def req(curProxy):
...
req = session.get(BASE_URL, proxies={'http': curProxy, 'https': curProxy})
然后迭代
for proxy in proxies:
req(proxy)