我尝试这样提交一个网页,有复选框,我需要这些复选框多达10个选中
问题是,当我试图把它们分配给一个dict中的一个名字时,它只指定最后一个,而不是全部10个
我该怎么做这是请求代码:
forms = {"_ref_ck": ref,
"type": "create",
"selected_items[]": sel_itms[0],
"selected_items[]": sel_itms[1],
"selected_items[]": sel_itms[2],
"selected_items[]": sel_itms[3],
"selected_items[]": sel_itms[4],
"selected_items[]": sel_itms[5],
"selected_items[]": sel_itms[6],
"selected_items[]": sel_itms[7],
"selected_items[]": sel_itms[8],
"selected_items[]": sel_itms[9]
}
data = urllib.urlencode(forms)
req = urllib2.Request('http://www.neopets.com/island/process_tradingpost.phtml',data)
res = self.opener.open(req)
html = res.read()
这是可行的,但我只为"selected_itmes[]"
发送一个值,当我查看web调试代理中的实际请求时,它会为"selected_items[]"
发送多个值,但我不知道如何使用python
请帮忙谢谢!!在
这个问题与
urlencode
无关;它是Python dict不能为同一个键保存多个值。您可以通过print
输出forms
来看到这个,在发送之前,selected_items[]
只有一个值。这一个值被编码得很好。在正如the documentation所解释的,有两种方法可以解决这个问题。在
首先,可以将一系列值附加到一个键上,并使用
doseq=True
标志:或者,可以传递两个元素元组的序列,而不是映射:
^{pr2}$(您也可以使用允许重复键的自定义
Mapping
类型,而不是标准的dict
,但这可能有点过头了。尤其是因为构造这样一个定制的Mapping
类型的通常方法是传递给它一系列键-值对……)您可以通过创建一个类并使其返回相同的字符串来实现这一点。 在Python3中:
输出为:
selected_items%5B%5D=one&selected_items%5B%5D=two
解决方案是taken from here
相关问题 更多 >
编程相关推荐