首页 > 解决方案 > 使用 python 请求登录 (mangadex.cc)

问题描述

我对 python 很陌生,我正在尝试为一个名为 mangadex 的网站制作网络爬虫,我正在尝试让登录功能正常工作,但我似乎无法关闭请求部分。有人可以解释我做错了什么吗?

搜索页面受登录页面的保护。

这是我的代码:

import requests


def login(username: str, password: str):
    url = "https://mangadex.cc/login/ajax/actions.ajax.php?function=login&nojs=1"
    with requests.session() as session:
        payload = {
            "login_username": username,
            "login_password": password
        }
        session.post(url, data=payload)
        return session


def search(session, title):
    resp = session.get("https://mangadex.cc/search", params={"title": title})
    return resp.text


session = login("VALIDUSERNAME", "VALIDPASSWORD")
search(session, "foo")

网站:https ://mangadex.cc/

标签: python

解决方案


首先,登录网址错误。

不: https://mangadex.cc/login/ajax/actions.ajax.php?function=login&nojs=1

https://mangadex.cc/ajax/actions.ajax.php?function=login


其次,AJAX-Request 需要特定的标头。

x-requested-with: XMLHttpRequest

如果您发送没有x-requested-with标头的 AJAX 请求,它将响应您已尝试 hack。

Hacking attempt... Go away.

第三,不要关闭会话。

代码:

def login(username: str, password: str):
    url = "https://mangadex.cc/ajax/actions.ajax.php?function=login"
    header = {'x-requested-with': 'XMLHttpRequest'}
    payload = {
        "login_username": username,
        "login_password": password,
    }

    session = requests.session()
    req = session.post(url, headers=header, data=payload)
    return session

推荐阅读