Я пытаюсь зайти на сайт, используя Python и Mechanize, однако у меня возникают проблемы при попытке заставить данные POST работать так, как я хочу.
По сути, я хочу повторить это, используя mechanize и Python:
wget --quiet --save-cookies cookiejar --keep-session-cookies --post-data "action=login&login_nick=USERNAME&login_pwd=PASSWORD" -O outfile.htm http://domain.com/index.php
Форма выглядит так:
<login POST http://domain.com/index.php application/x-www-form-urlencoded
<TextControl(login_nick=USERNAME)>
<PasswordControl(login_pwd=PASSWORD)>
<CheckboxControl(login_auto=[1])>
<SubmitButtonControl(<None>=) (readonly)>>
Установка соответствующих значений и отправка формы не является проблемой, но это исключает часть "action = login".
response = self.browser.open(self.url+"/index.php")
self.browser.select_form(name="login")
self.browser["login_nick"] = self.encoded_username
self.browser["login_pwd"] = self.encoded_password
self.browser.method = "POST"
response = self.browser.open(self.browser.submit())
print (response.read())
Теперь вопрос, как мне добавить action=login
часть?
Редактировать: Хорошо, поэтому я добавил скрытое поле с именем action и установил значение login . Анализируя поток TCP с помощью Wireshark, данные POST действительно структурированы так, как должны. Тем не менее, кажется, что Mechanize мешает моему urlencoding (я уже urlencoded значения специально для кодировки, которую использует веб-сайт). Например, мое имя пользователя содержит Å, которое я кодировал в% C5. Тем не менее, когда он отправляется с механизацией, он отображается как% 25C5.
Как мне остановить механизацию от замены строк?
РЕДАКТИРОВАТЬ: я понял, что вместо борьбы с механизацией, я мог бы просто не urlencode мои строки перед отправкой их Дело закрыто.