#python #python-2.7 #python-requests
#питон #python-2.7 #python-запросы
Вопрос:
Я пытаюсь запросить у пользователя имя пользователя и пароль для входа на сайт. Мой план состоит в том, чтобы использовать запросы для отправки почтовых данных. Вот код, который у меня есть до сих пор:
import requests
import getpass
uname = raw_input("Username: ")
passw = getpass.getpass(prompt = "Password: ")
FORM_DATA = {
"__EVENTTARGET:",
"__EVENTARGUMENT:",
"__VIEWSTATE:/wEPDwUKMTA5NTA5ODU1MQ9kFgJmD2QWAgIGDxBkDxYFZgIBAgICAwIEF***REMAINDER REMOVED***",
"__EVENTVALIDATION:/wEdAAp4d3BHvSTs Kv6cxGP3xEbBr8xrgRYad2tj4YCyRIw5qUAjimf****REMAINDER REMOVED****",
"jsCheck:",
"ddlEngine: REMOVED:13008",
"Username: %(uname)s" ,
"Password: %(passw)s",
"btnLogin.x: 42",
"btnLogin.y: 9",
"btnLogin: Login",
}
print FORM_DATA
Очевидно, что это всего лишь часть данных POST, но я хочу сначала проверить, переданы ли учетные данные, прежде чем двигаться дальше. Использование print не показывает, что входные данные были вставлены в определенные места.
Комментарии:
1. Вы уверены , что это заголовки, а не данные POST? Между ними есть большая разница.
2. Да, извините, это данные POST, которые я получил со страницы после входа в систему. Отредактировано исходное сообщение.
Ответ №1:
Данные POST из формы — это просто серия пар ключ-значение. Поскольку все ключи уникальны, просто используйте словарь для их представления:
FORM_DATA = {
'__EVENTTARGET': '',
'__EVENTARGUMENT': '',
'__VIEWSTATE': '/wEPDwUKMTA5NTA5ODU1MQ9kFgJmD2QWAgIGDxBkDxYFZgIBAgICAwIEF***REMAINDER REMOVED***',
'__EVENTVALIDATION': '/wEdAAp4d3BHvSTs Kv6cxGP3xEbBr8xrgRYad2tj4YCyRIw5qUAjimf****REMAINDER REMOVED****',
'jsCheck': '',
'ddlEngine': 'REMOVED:13008',
'Username': uname,
'Password': passw,
'btnLogin.x': '42',
'btnLogin.y': '9',
'btnLogin': 'Login',
}
с пустыми значениями, представленными пустыми строками.
Клавиши btnLogin.x
и btnLogin.y
обычно просто игнорируются сервером; они сообщают, где вы нажали на кнопку с изображением. Вы можете просто установить ключи имени пользователя и пароля непосредственно из uname
passw
уже установленных вами переменных и.
Затем используйте этот словарь в качестве data
ключевого слова для requests.post()
вызова.
Возможно, сервер ожидает возврата файла cookie, установленного при первоначальной загрузке формы. В этом случае объект сеанса и вызов .get()
и .post()
на этом.
Может случиться так, что ключи __VIEWSTATE
и __EVENTVALIDATION
динамически устанавливаются при первом создании формы, вам нужно будет загрузить ее requests.get()
, проанализировать HTML (используя, скажем, BeautifulSoup) и извлечь поля формы перед отправкой.
Комментарии:
1.
'%(uname)s'
должно быть простоuname
и'%(password)s'
должно быть простоpassword
.2. @JonathanVillemaire-Крайден: ах, я действительно пропустил те, которые уже были установлены. Исправлено.
3. Сработало как по волшебству. Спасибо!!