【问题标题】:Python submit post data using mechanizePython使用mechanize提交post数据
【发布时间】:2013-04-09 13:17:58
【问题描述】:

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

【问题讨论】:

    标签: python post mechanize urlencode html-post


    【解决方案1】:

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

      • 感谢您的完整回答,但 DJC 比您快。
      猜你喜欢
      • 2017-04-06
      • 2012-06-16
      • 2012-01-24
      • 2016-12-04
      • 2011-10-31
      • 1970-01-01
      • 2011-06-29
      • 2012-07-01
      • 1970-01-01
      相关资源
      最近更新 更多