How to "log in" to a website using Python's Requests module?
Как "войти" на веб-сайт с помощью модуля запросов Python?
Я пытаюсь отправить запрос на вход на веб-сайт с помощью модуля запросов на Python, но на самом деле это не работает. Я новичок в этом деле. this...so Я не могу понять, должен ли я создавать файлы cookie для своего имени пользователя и пароля или какой-то тип авторизации HTTP, который я нашел (??).
Итак, я думаю, что я делаю это правильно, но вывод по-прежнему "Locationary.com"
2-я ПРАВКА:
Я хочу иметь возможность оставаться в системе в течение длительного времени, и всякий раз, когда я запрашиваю страницу в этом домене, я хочу, чтобы содержимое отображалось так, как если бы я входил в систему.
Переведено автоматически
Ответ 1
Я знаю, что вы нашли другое решение, но для таких, как я, которые задают этот вопрос, ища то же самое, это может быть достигнуто с помощью запросов следующим образом:
Во-первых, как это сделал Маркус, проверьте источник формы входа, чтобы получить три фрагмента информации - URL, на который отправляется форма, и атрибуты name полей имени пользователя и пароля. В его примере это inUserName и inUserPass.
Получив это, вы можете использовать requests.Session() экземпляр, чтобы отправить post-запрос на URL-адрес для входа с вашими регистрационными данными в качестве полезной нагрузки. Выполнение запросов из экземпляра сеанса по сути такое же, как обычное использование запросов, это просто добавляет постоянства, позволяя вам хранить и использовать файлы cookie и т.д.
Предполагая, что ваша попытка входа в систему была успешной, вы можете просто использовать экземпляр сеанса для отправки дальнейших запросов на сайт. Файл cookie, который идентифицирует вас, будет использоваться для авторизации запросов.
Пример
import requests
# Fill in your details here to be posted to the login form. payload = { 'inUserName': 'username', 'inUserPass': 'password' }
# Use 'with' to ensure the session context is closed after use. with requests.Session() as s: p = s.post('LOGIN_URL', data=payload) # print the HTML returned or something more intelligent to see if it's a successful login page. print(p.text)
# An authorised request. r = s.get('A protected web page URL') print(r.text) # etc...
Ответ 2
Если нужная вам информация находится на странице, на которую вы попадаете сразу после входа в систему...
Давайте вместо этого вызовем вашу ck переменную payload, как в документации по python-requests:
Позвольте мне попытаться упростить, предположим, URL сайта http://example.com / и давайте предположим, что вам нужно зарегистрироваться, введя имя пользователя и пароль, поэтому мы переходим на страницу входа, скажем http://example.com/login.php теперь просмотрите его исходный код и найдите URL-адрес действия, он будет в теге формы что-то вроде
r = requests.post(url, data=values) print r.content
Я надеюсь, что это когда-нибудь кому-нибудь поможет.
Ответ 4
Решение requests.Session() помогло войти в форму с защитой CSRF (как используется в формах Flask-WTF). Проверьте, требуется ли csrf_token в качестве скрытого поля, и добавьте его в полезную нагрузку вместе с именем пользователя и паролем: