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

时间:2019-09-21 11:58:44

标签: python http python-requests

我正在使用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,但事实并非如此-当不接受请求时,我不知道状态码是什么。解决该问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

www.memrise.com 的登录名中包含CSRF-Token方法,因此您必须使用BeautifulSoup在登录页面中找到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')