Авторизация на сайте с помощью python requests
Еще один вопрос на эту тему.
Есть тестовый сайт(он внутренний, посмотреть в живую не возможно) на котором надо авторизоваться, пикчи там нет, запрос выглядит так:
-----------------------------259453718138943564301838662474
Content-Disposition: form-data; name="XCSRFTokenF"
CfLJ8OV_ly7Ch80Iryc-kXeMXRJa0lVOfP5_Dg3h9HrqEV0JcjwepmXwideWUlciaEvmHcocZfxWjcBHWeCC7k_KVLzPqqnVmepViR8AKHin66FHGNn1MjjTTvrTuNznOavFyJzVBsSFUfDgWxO1oAYp0ag
-----------------------------259453718633943564301838662477
Content-Disposition: form-data; name="ReturnUrl"
/ClientDevice
-----------------------------259453718633943564301838662477
Content-Disposition: form-data; name="Email"
[email protected]
-----------------------------259453718633943564301838662477
Content-Disposition: form-data; name="PasswordUser"
1qaz@WSX
-----------------------------259453718633943564301838662477--
В теме не особо разбираюсь, посмотрел кучу видосов, у всех почемуто даже запрос внешне отличается в браузере в инструменте разработчика. Наивно попробовал следующий код:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/75.0.3770.142 Safari/537.36 '
}
data = {
"Email":"[email protected]",
"PasswordUser":"1qaz@WSX"
"ReturnUrl":"/ClientDevice"
}
url = "http://lk.testsite.ru/Account/Login"
s = requests.Session()
s.post(url, data=data, header=headers)
r = s.get("http://lk.testsite.ru/systemparameter")
#здесь пытаюсь забрать страницу, которуую нельзя увидеть без авторизации
print(r.text)
#здесь разочарованно смотрю на код страницы авторизации
Подозреваю что часть проблемы в ""XCSRFTokenF". Что собственно надо сделать?(
Ответы (1 шт):
Токен XCSRFTokenF нужно на странице сайта вытаскивать из тега input. Это защита, которая заставляет сначала загрузить страницу сайты, после сделать с нее запрос.
На сайте данные отправляются в другом формате. При отправке через data= данные будут как Content-Type = application/x-www-form-urlencoded, а у сайта данные отправляются в Content-Type = multipart/form-data (параметр files= в post), такое можно посмотреть в инспекторе браузере в заголовках запроса.
Для отправки в multipart/form-data поменяйте атрибут на files:
r = s.post(url, files=data, header=headers)
print(r)