python - 使用 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/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
推荐阅读
- python - 增加列表的 for 方法
- cron - 您可以以编程方式打开/关闭无服务器 cron 功能吗
- php - 如何分离php数组结果
- haskell - 发生检查:无法构造无限类型
- session-cookies - 谷歌分析跟踪电子商务在感谢页面
- c# - 锁定在 GetEnumerator() 内部……在带有 LINQ 扩展的 foreach 中会发生什么?
- html-email - 在电子邮件中覆盖用于翻译的选项卡
- javascript - 带有少量特殊标签的备忘录字段(客户端和服务器端)的正则表达式验证
- javascript - 未处理的拒绝 ReferenceError:未定义分页
- html - 无法让砖石与 HTML 初始化一起工作