Python使用mechanize提交post数据

时间:2013-04-09 13:17:59

标签: python post mechanize urlencode html-post

我必须提交给服务器的网址如下所示:

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 个答案:

答案 0 :(得分:2)

您对复选框字段名称进行了双重编码;您应该使用checkbox[]代替checkbox%5B%5D。此外,由于该键名被重用,您可能无法使用字典来收集参数。

答案 1 :(得分:2)

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!

在您的代码中,您实际上是在编码已编码的网址:

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)