尽管匹配网络表单数据,但仍无法使用request.post登录网站

时间:2020-07-23 08:58:12

标签: python authentication post web-scraping python-requests

我无法使用请求登录网站,也无法获取帐户背后的API数据。请求的有效负载数据与用于正常登录的表单数据相匹配。

我的代码如下:

urlpage = 'https://speechanddebate.org/login'

header = {'User-Agent': 'Chrome/84.0.4147.89'}
payload = {'log': "email@gmail.com",
           'pwd': "password",
           'wp-submit': 'Log In',
           'rememberme': 'forever',
           'redirect_to': '/account',
           'testcookie': '1'}
session = requests.Session()
test = session.post(urlpage, headers = header, data = payload)

我使用inspect元素来查找正常登录时(而非通过网络抓取)通过POST发送的数据,当我在网络下进行检查时,它会给出以下结果:

Image of Network

与其他StackOverFlow答案相比,我不确定自己在做什么。这是我尝试进行的代码修改的列表:

  • 没有会话,仅执行普通请求
  • 对数据URL进行编码
  • 更改它并包含一个with requests.Session() as session:块,而不只是 session = requests.Session()
  • 并尝试了带有标题和不带有标题等的POST。

正常登录后,我会收到状态码302,表示登录成功,并且我已转移到另一个网页。但是,当我通过网络抓取方法执行操作时,它无法登录并返回状态代码200,并将其返回到登录页面。

1 个答案:

答案 0 :(得分:0)

尝试

headers = {
    'authority': 'www.speechanddebate.org',
    'cache-control': 'max-age=0',
    'upgrade-insecure-requests': '1',
    'origin': 'https://www.speechanddebate.org',
    'content-type': 'application/x-www-form-urlencoded',
    'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'sec-fetch-dest': 'document',
    'referer': 'https://www.speechanddebate.org/login/',
    'accept-language': 'en-US,en;q=0.9',
         }