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)