Python请求登录麦当劳

时间:2019-08-27 02:53:39

标签: python python-requests

我的问题是,登录mcdonalds登录页面时,我收到200没关系的代码,但是当我从html页面打印文本时,它说“内容已修改”,我不知道为什么。我不确定我应该使用什么标题(没有CSRF令牌),用于登录的数据包含我的帐户信息,因此我不会发布该信息。

我也尝试过使用会话。

headers = {'Content-Encoding': 'gzip', 'Set-Cookie': 'HttpOnly;Secure, MCDCountry_code=US; path=/', 'Content-Type': 'application/json', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36', 'referer': 'https://www.mcdonalds.com/us/en-us/subscription.html', 'origin': 'https://www.mcdonalds.com/us/en-us/'}
data= {
    "signinemail" : "myemail",
    "signinpassword": 'mypass'
    }
e = requests.post("https://www.mcdonalds.com/us/en-us/subscription.html", data=data, headers=headers, allow_redirects=True)

我希望被重定向到主页,但是什么也没有。我的问题是我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的问题很可能是POST请求中缺少的Cookie。

使用您喜欢的浏览器查看通过浏览器登录时正在发送的请求。尝试找出Cookie包含的内容。

然后在Python中,您可以传递类似的cookie:

import requests

jar = requests.cookies.RequestsCookieJar()
jar.set('some_var', 'some_value', domain='www.mcdonalds.com', path='/us/en-us')

headers = {'Content-Encoding': 'gzip', 'Set-Cookie': 'HttpOnly;Secure, MCDCountry_code=US; path=/', 'Content-Type': 'application/json', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36', 'referer': 'https://www.mcdonalds.com/us/en-us/subscription.html', 'origin': 'https://www.mcdonalds.com/us/en-us/'}
data= {
    "signinemail" : "myemail",
    "signinpassword": 'mypass'
    }
e = requests.post("https://www.mcdonalds.com/us/en-us/subscription.html", cookies=jar, data=data, headers=headers, allow_redirects=True)

请注意,我尚未对此进行测试,我不想登录到McDonalds站点,但这就是模式。请注意,如果您只想传递一个cookie并只希望将其直接应用于请求,则不必使用jarjar可以用来定义多个cookie,或将它们指向请求的站点特定部分。简单的cookie:

my_cookie = {'some_var': 'some_value'}
e = requests.post("https://www.mcdonalds.com/us/en-us/subscription.html", cookies=my_cookie, data=data, headers=headers, allow_redirects=True)

按照@John Gordon的建议,您还可以先在登录页面上执行GET,然后从那里获取所需的cookie,并将其与登录POST请求一起传回。