python - 如何使用请求模块修复“CSRF 验证失败”
问题描述
我正在使用 python 请求库,并且正在尝试登录https://www.udemy.com/join/login-popup/,问题是当我使用以下标头时:
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
它返回CSRF verification failed. Request aborted
。
当我将其更改为:
headers = {'Referer': url}
它返回Please verify that you are a human
。
有什么建议么?
我的代码:
import requests
with requests.session() as s:
url = 'https://www.udemy.com/join/login-popup/'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/74.0.3729.131 Safari/537.36'}
request = s.get(url, headers=headers)
cookies = dict(cookies=request.cookies)
csrf = request.cookies['csrftoken']
data_login = {'csrfmiddlewaretoken': csrf, 'locale': 'en_US', 'email': 'myemail',
'password': 'maypassword'}
request = s.post(url, data=data_login, headers={'Referer': url}, cookies=cookies['cookies'])
print(request.content)
解决方案
您当前的代码存在几个问题:
您使用的标头缺少一些东西
您传递的
csrfmiddlewaretoken
值不正确当您使用
requests.session()
时,您不应手动包含 cookie (在这种情况下)
试试这个代码:
import requests
from bs4 import BeautifulSoup
with requests.session() as s:
url = 'https://www.udemy.com/join/login-popup/'
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0", "Referer": "https://www.udemy.com/join/login-popup/", "Upgrade-Insecure-Requests": "1"}
request = s.get(url, headers=headers)
soup = BeautifulSoup(request.text, "lxml")
csrf = soup.find("input",{"name":"csrfmiddlewaretoken"})["value"]
data_login = {'csrfmiddlewaretoken': csrf, 'locale': 'en_US', 'email': 'myemail@test.com','password': 'maypassword'}
request = s.post(url, data=data_login, headers=headers)
print(request.content)
(PS:我正在使用Beautifulsoup库来查找 的值 csrfmiddlewaretoken
)
希望这可以帮助
推荐阅读
- go - 函数无法识别 Yaml 嵌套结构
- swiftui - SwiftUI 无法关闭包含 NavigationView 的工作表
- acumatica - 在哪里可以找到 acumatica 中网格操作按钮的代码
- sql - 插入时违反了唯一约束
- python - 散景服务器在启动时挂起(Windows、Python 3.8)
- angular - 重复的 Http 请求
- javascript - Javascript - 处理鼠标拖动事件
- json - 在 PRISM WPF 应用程序上下文中接收 HTTP JSON 请求的最佳解决方案是什么?
- flutter - How to update variable from TextFormField in flutter?
- phpstorm - PhpStorm 文件观察器“错误:找不到模块”在 rollupjs 脚本中带有 babel 插件(没有可用的可执行文件),插件全局安装