Страница входа довольно проста, но вы отправляете сообщение не по адресу.
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 request.get всегда получите 404 для обзора того, какие стратегии вы можете использовать, если вы действительно хотите продвинуть это.