无法使用python请求库登录网页

2024-04-23 21:17:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过脚本登录edx网站。为此,我使用python的请求库。这是密码

from requests import session

ID = 'example@gmail.com'
PASSWORD = '*********'


with session() as c:
     g = c.get('https://courses.edx.org/login/', allow_redirects=True)
     csrftoken = (g.headers['set-cookie']).split()[0][10:-1]
     login_data = dict(email=ID, password=PASSWORD, csrfmiddlewaretoken=csrftoken, next='/')
     a = c.post('https://courses.edx.org/login/', data=login_data, headers={'Referer':'https://courses.edx.org/login/'})
     response = c.get('https://courses.edx.org/dashboard')
     print response.url

但是这个代码不起作用。输出是

https://courses.edx.org/accounts/login?next=/dashboard

当我运行a.content时。它正在显现

CSRF verification failed. Request aborted

任何人请帮帮我。在


Tags: httpsorgiddatagetresponsesessionlogin
1条回答
网友
1楼 · 发布于 2024-04-23 21:17:23

事实上,你在为CSRF代币分拆

csrftoken = (g.headers['set-cookie']).split()[0][10:-1]

将获取csrf令牌作为“sessionid=csrfstring”。你也必须删除sessionid部分。所以把它改成

^{pr2}$

使用pythonshell验证是否以正确的方式获取csrf令牌。在

如果您想从edx提取格式化数据,那么最好使用edxapi注册您的应用程序。然后可以使用OAuth 2机制访问api。这包括创建code并将该代码交换为access token。它类似于gmail和facebook提供的OAuth2认证。有关如何创建令牌的详细信息是here。还提供demo

相关问题 更多 >