Python请求:网站不接受登录请求

2024-05-08 23:47:01 发布

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

我使用python请求登录到一个网站,但它不会接受我的请求。你知道吗

我在网站的源代码中寻找了隐藏的输入,但没有找到任何输入,我听说这可能与添加标题有关,但我不知道如何找到标题或如何将它们添加到我的代码中。你知道吗


session = requests.session()

login_data = {
    'csrfmiddlewaretoken': 'S75hu6eF1FV6axGK8ffV5JC7mYw8Z3AbviU453U0rOQPYPu7iiBCVxRnV2XywfVh',
    'username': '<my_username>',
    'password': '<my_password>',
    'next': '/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms'
}

session.get(url)

r = session.post('https://www.memrise.com/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms/login.py', login_data)

if r.status_code == 200:
    res = session.get(url)
    print('YES!!!')
else:
    print('NOOOOOOOOOOOOOOOO')

我希望状态码是200,但它不是-我不知道当它不接受请求时状态码是什么。任何帮助解决这个问题都将不胜感激。你知道吗


Tags: 标题sourcedata网站sessionmyusernamelogin
1条回答
网友
1楼 · 发布于 2024-05-08 23:47:01

www.memrise.com在它的登录中有CSRF Token方法,因此您必须使用BeautifulSoup和use headers从登录页中找到CSRF Token。你知道吗

import bs4
import requests

url = 'https://www.memrise.com/login/'
session = requests.session()

response = session.get(url)
soup = bs4.BeautifulSoup(response.text, 'lxml')
csrf_token = soup.find('input', {'name': 'csrfmiddlewaretoken'}).get('value')

headers = {
    'Host': 'www.memrise.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Referer': 'https://www.memrise.com/login/',
    'Content-Type': 'application/x-www-form-urlencoded',
}

login_data = {
    'csrfmiddlewaretoken': csrf_token,
    'username': '<my_username>',
    'password': '<my_password>',
    'next': '/course/2021573/french-1-145/garden/speed_review/?source_element=ms_mode&source_screen=eos_ms'
}

r = session.post(url, login_data, headers=headers)

if r.status_code == 200:
    res = session.get(url)
    print('YES!!!')
else:
    print('NO')

相关问题 更多 >