Python отправляет данные постов с использованием mechanize

URL-адрес, который я должен отправить на сервер, выглядит следующим образом:

www.mysite.com/manager.php?checkbox%5B%5D=5&checkbox%5B%5D=4&checkbox%5B%5D=57&self=19&submit=Go%21

Данные поста я поставил так:

data = {'checkbox%5B%5D': '4', ....and so on... 'self': '19', 'submit': 'Go%21'}

Я кодирую это:

data = urllib.urlencode(orbs)

и вот как я запускаю это:

resp = mechanize.Request('http://mysite.com/manager.php', data)
cj.add_cookie_header(resp)
res = mechanize.urlopen(resp)
print res.read()

И ошибка говорит: что я не выбрал ни одного элемента. Как я могу сделать это правильно, не используя br.select_form(nr=0), потому что у меня есть вложенные формы? Благодарю.

2 ответа

Решение

Вы дважды закодировали имена полей флажка; ты должен использовать checkbox[] вместо checkbox%5B%5D, Кроме того, поскольку это имя ключа используется повторно, вы, вероятно, не сможете использовать словарь для сбора аргументов.

Url-кодирование - это процесс преобразования строки (то есть '[]') в строку с кодированием в процентах (т. Е. "%5B%5D"), а декодирование URL-адреса является противоположной операцией. Так:

checkbox%5B%5D=5&checkbox%5B%5D=4&checkbox%5B%5D=57&self=19&submit=Go%21

после декодирования:

checkbox[]=5&checkbox[]=4&checkbox[]=57&self=19&submit=Go!

В вашем коде вы на самом деле кодируете уже закодированный URL:

data = {'checkbox%5B%5D': '4', ....and so on... 'self': '19', 'submit': 'Go%21'}
data = urllib.urlencode(orbs)

Вместо этого используйте декодированные данные и передайте их в urlencode:

data = {'checkbox[]': '4', ....and so on... 'self': '19', 'submit': 'Go!'}
data = urllib.urlencode(orbs)
Другие вопросы по тегам