我正在尝试使用urllib发送POST数据,但问题通常是您对字段字典进行urlencode,然后将其与您的请求一起发送。但是我必须发送到服务器的一些字段被命名为完全相同的名称,因此使用字典我最终会从字典中删除大量数据,因为您不能拥有两个具有相同名称的密钥不同的数据。
我以正确的语法以字符串格式获取请求数据(例如,var = value& var = value2& ...),我尝试将其与我的urllib请求一起发送,但每次都收到错误请求时间。有没有其他方法在发送之前对数据进行urlencode,所以我没有得到400?
答案 0 :(得分:6)
urllib.urlencode()
可以获取元组列表,允许您为参数指定多个值:
>>> urlencode([("var", "value"), ("var", "value2")])
'var=value&var=value2'
或使用带有列表的地图作为值:
>>> p = {"var": ["value", "value2"], "var2": ["yetanothervalue"]}
>>> urlencode([(k, v) for k, vs in p.items() for v in vs])
'var=value&var=value2&var2=yetanothervalue'
您甚至可以将列表或字符串作为值,尽管它不那么简洁:
>>> p = {"var": ["value", "value2"], "var2": "yetanothervalue"}
>>> urlencode([(k, v) for k, vs in p.items()
... for v in isinstance(vs, list) and vs or [vs]])
'var=value&var=value2&var2=yetanothervalue'