Запросы Python — вставка учетных данных в качестве переменных в FORM_DATA

#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. Сработало как по волшебству. Спасибо!!