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