Невозможно войти на сайт через python

Я пытаюсь войти на веб-сайт, чтобы получить некоторые данные. Я заметил, что в методе «post» нет данных формы, но есть «полезная нагрузка запроса». Кроме того, когда я вхожу в систему, я больше не вижу метод входа в систему. Вот скриншот метода входа в сеть через пост:

описание

Когда я вхожу в систему, следующая страница показывает, что я использую следующий код для входа в систему:

 import requests
 urlData = 'https://b*********.dk/Account/Market'
 urlLogin = 'https://b**********an.dk/


 with requests.Session() as c:
     urlLogin = 'https://b*************n.dk/Authorization/
     c.get(urlLogin)
     NetSession = c.cookies['ASP.NET_SessionId']
     login_data = {
                   'ASP.NET_SessionId': NetSession,
                   'username':"A******",
                   'Password':"q******",
                   'remmemberMe': True
                   }

lol = c.post(urlLogin, data=login_data)
print(lol.text)

Запустив этот код, выводится следующее:

{"Processed":true,"Message":"The user name or password provided is incorrect.","NeedResetPassword":false}

Когда я ввожу неправильный пароль, значение Processed равно false, а при правильных учетных данных - true. Но он не входит в систему. Любая идея, почему это могло произойти?


person Mpizos Dimitris    schedule 02.05.2015    source источник
comment
Вы захотите изменить этот пароль/имя пользователя... даже если вы удалите его с помощью редактирования, почти уверен, что теперь это станет постоянной частью истории.   -  person Foon    schedule 02.05.2015
comment
Что касается более полезной примечания к вопросу... Я вижу ASP.NET; по моему опыту, часто одно или несколько скрытых значений передаются в их формы/формы, такие как вещи. Я бы предложил использовать fiddler или аналогичный, чтобы увидеть, что именно передается реальным браузером, и убедиться, что ваш код отправляет то же самое. (Для одного проекта, который включал настройку запросов агента, используемых для соответствия firefox, поскольку в противном случае он обрабатывался по-разному) (Также также... на снимке экрана у вас есть имя пользователя и пароль; в коде у вас есть имя пользователя и пароль. .. проверьте правильность написания падежа)   -  person Foon    schedule 02.05.2015
comment
Какое поведение в браузере? Это запрос XHR, поэтому мне интересно, проверяют ли они сначала обработанный элемент, а сообщение не имеет значения?   -  person Dwight Gunning    schedule 02.05.2015
comment
@dwightgunning Я думаю, что это не имеет значения. Потому что, если я попытаюсь использовать .get() URL-адрес защищенной веб-страницы, я получу ошибку TypeError: getresponse() got an unexpected keyword argument 'buffering'   -  person Mpizos Dimitris    schedule 02.05.2015


Ответы (1)


Как вы уже правильно заметили, исходные учетные данные отправляются не с использованием кодировки формы (что означает &user=alice&password=secret), а в кодировке JSON (то есть скорее {"user":"alice", "password": "secret"}). Вы также можете увидеть это в заголовке Content-Type запроса, который является application/json где (в отличие от application/x-www-form-urlencoded в противном случае).

Чтобы ваш пользовательский запрос работал, вам, возможно, также потребуется отправить данные в формате JSON. Это подробно описано в официальной документации, так что приведу краткую версию:

import json

# Build session and request body just like you already did in your question
# ...

headers = {"Content-Type": "application/json"}
lol = c.post(urlLogin, data=json.dumps(login_data), headers=headers)
print(lol.json())
person helmbert    schedule 02.05.2015
comment
Спасибо за ответ. Я добавил эти строки, но это не дало других результатов. - person Mpizos Dimitris; 02.05.2015