2

我必须提交给服务器的 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) 的情况下正确地做到这一点?谢谢。

4

2 回答 2

2

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

于 2013-04-09T13:22:28.760 回答
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!

在您的代码中,您实际上是在封装一个已经编码的 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)
于 2013-04-09T13:22:55.843 回答