python - 为什么我的登录不能使用 Python 请求?
问题描述
在过去的几天里,我一直在尝试使用 Python Requests 登录并且遇到了问题。
这是我的代码:
import requests
LOGINURL = "https://admin.neopets.knetik.com/admin/login"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"
payload = {
"_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
"_username": "***",
"_password": "***",
"_remember_me": "on",
}
with requests.session() as session:
post = session.post(LOGINURL, data=payload)
response = session.get(PROTECTEDPAGE)
print(response.text)
我确定我拥有所需的所有参数。我试过搜索 hidden_inputs,我遇到的唯一一个是“_target_path”。
知道我可能缺少什么吗?
解决方案
登录页面非常简单,但是您发布到错误的 URL。
您发布到的 URL 用于登录表单,但它不接受任何登录凭据。该<form>
标签告诉您将这些发送到哪里:
<form action="/admin/admin_login_check" ... method="POST">
该action
属性是一个相对 URL,指向您需要发送 POST 数据。
使用该路径作为登录 URL:
LOGINURL = "https://admin.neopets.knetik.com/admin/admin_login_check"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"
payload = {
"_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
"_username": "***",
"_password": "***",
"_remember_me": "on",
}
with requests.session() as session:
post = session.post(LOGINURL, data=payload)
response = session.get(PROTECTEDPAGE)
print(response.text)
但是,有些实现希望您首先向GET
表单页面发送一个,以建立一个会话 cookie。该页面不使用任何 CSRF 保护,因此您不必加载表单来解析该信息。
由于这些页面使用 HTTPS,您可能还希望将原始表单 URL 作为Referer
标头传递(它通常在 HTTP 或遍历域时被过滤掉,作为安全和隐私措施),该站点可能会将其用作附加针对自动登录的措施:
FORMURL = "https://admin.neopets.knetik.com/admin/login"
LOGINURL = "https://admin.neopets.knetik.com/admin/admin_login_check"
PROTECTEDPAGE = "https://admin.neopets.knetik.com/admin/order_summary/list"
payload = {
"_target_path": "https://admin.neopets.knetik.com/admin/dashboard",
"_username": "***",
"_password": "***",
"_remember_me": "on",
}
with requests.session() as session:
session.get(FORMURL)
post = session.post(LOGINURL, data=payload, headers={'Referer': FORMURL})
response = session.get(PROTECTEDPAGE)
print(response.text)
如果这仍然不起作用,则服务器正在使用其他机器人嗅探技术。请参阅python requests.get always get 404了解如果你真的想推动它,你可以遵循什么样的策略。
推荐阅读
- vue.js - _vm.paginated 不是 vue-paginate 的函数错误
- javascript - 为什么 shuffle 在 React 中不起作用?
- c# - C# NewtonSoft.Json : 允许 MongoDB 驱动程序使用 ShouldSerialize 方法
- android - 如何处理 exoplayer 库抛出的 IllegalStateException
- ffmpeg - 如何在 FFmpeg 4.0 中将 5.1 音频拆分为离散的 AAC 流
- node.js - 从回调设置全局变量
- javascript - CSS + JS – sidenav 打开时右推正文而不调整图像大小
- java - 给定一个字符串,找出它是否满足 IPv4 地址命名规则(代码审查)而不是寻找其他解决方案
- ios - 如何在 Swift 中以编程方式更改设备方向?
- ember.js - 在 Ember CLI 构建期间合并插件供应商文件