Python请求登录麦当劳

Python请求登录麦当劳,python,python-requests,Python,Python Requests,我的问题是,当我登录到麦当劳的登录页面时,我收到了一个200代码,这是可以的,但是当我从html页面打印文本时,它会显示“内容已修改”,我不知道为什么。我不确定我应该使用什么标题(没有CSRF令牌)我的登录数据包含我的帐户信息,所以我不会发布 我还尝试使用会话 headers = {'Content-Encoding': 'gzip', 'Set-Cookie': 'HttpOnly;Secure, MCDCountry_code=US; path=/', 'Content-Type': 'ap

我的问题是,当我登录到麦当劳的登录页面时,我收到了一个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)

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

您的问题可能是
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)
请注意,我还没有测试过这个,我不想登录到麦当劳网站,但这是一种模式。请注意,如果您只想传递一个cookie,只想将其直接应用于请求,则不必使用
jar
jar
允许您定义多个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
请求一起传递回去。

在许多情况下,问题是您在发布请求时没有适当的cookie,加载登录表单时,浏览器上会设置该cookie。@Grismar好的,我不知道如何获取cookie并在标题中使用它。有什么建议吗?使用会话,并从会话中获取和发布。这允许服务器设置它想要的任何cookie。@约翰戈登显然声称“
noahbn
也尝试使用会话”@noahbn您能展示一下您在会话中使用的代码吗?