如何使用请求modu修复“CSRF验证失败”

2024-04-18 06:54:17 发布

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

我正在使用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)

Tags: httpscomurlmozilladatarequestwwwlogin
1条回答
网友
1楼 · 发布于 2024-04-18 06:54:17

您当前的代码有几个问题:

  1. 您使用的标题缺少一些内容

  2. 传递给csrfmiddlewaretoken的值不正确

  3. 在使用requests.session()时,不应手动包含cookies(在本例中)

请尝试以下代码:

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的值)

希望这有帮助

相关问题 更多 >