我正在尝试提交一个包含复选框的网页,我最多需要选中其中的 10 个复选框
问题是当我尝试将它们分配给字典中的一个名称时,它只分配最后一个而不是全部 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 字典不能为同一个键保存多个值。您可以在发送之前通过print
打印出forms
来查看这一点——selected_items[]
只有一个值。那个值被编码得很好。
作为the documentation解释说,有两种解决方法。
首先,您可以将一系列值附加到一个键,并使用 doseq=True
标志:
forms = {"_ref_ck": ref,
"type": "create",
"selected_items[]": sel_itms[:10]
}
data = urllib.urlencode(forms, doseq=True)
或者,您可以传递一个双元素元组序列而不是映射:
forms = (("_ref_ck", ref),
("type", "create"),
("selected_items[]", sel_itms[0]),
("selected_items[]", sel_itms[1]),
# ...
)
data = urllib.urlencode(forms)
(您还可以使用允许重复键的自定义 Mapping
类型,而不是标准的 dict
,但这可能有点矫枉过正。特别是因为通常的构造方法自定义 Mapping
类型是通过向其传递一系列键值对......)
关于python - 为一个名称 urllib2 发送多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201752/