我正在尝试使用该requests库登录站点,但它通常无法正常工作。
我希望该网站像通过浏览器访问时一样发送一个cookie:
csrftoken: Bl5DOVcUge5VeRv771nAIUNbxmm9Z9l2
但是,我收到的只是以下内容:
__cfduid: d2f8e300a0b867e8a6147462f3977f8b11375815648197 for .example2.net/
这是我期望的:
agent1 = requests.session()
agent1.get('https://example1.com/')
print agent1.cookies
返回值:
<[, , , , ]>
这不是:
agent2 = requests.session()
agent2.get('https://www.example2.net')
print agent2.cookies
它返回:
<[
该__cfduidcookie与站点后面运行的CloudFlare DDOS保护服务有关。这可能与问题有关吗?
解决方案
我发现了类似的问题。在我的情况下,我试图登录并执行POST到URL,服务器重定向了我。在此重定向期间,设置了cookie(正如我在浏览器中看到的那样),但是在我的python程序中未设置cookie。
我发现定义一些类似于浏览器的标头并禁用重定向可解决此问题。
headers = {
'Host': 'www.example.net',
'Origin': 'http://www.example.net',
'Referer': 'http://www.example.net/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'}
session = requests.Session()
session.headers = headers
session.post('http://www.example.net/login/', data=values, allow_redirects=False)