Python urllib2发送POST数据

Jef*_*eff 1 python http

我正在尝试使用urllib发送POST数据,但问题通常是您对字段字典进行urlencode,然后将其与您的请求一起发送.但是我必须发送到服务器的一些字段被命名为完全相同的名称,因此使用字典我最终会从字典中删除大量数据,因为您不能拥有两个具有相同名称的密钥不同的数据.

我以正确的语法(例如,var = value&var = value2&...)以字符串格式获取我的请求数据,并尝试将其与我的urllib请求一起发送,但每次都收到一个错误的请求.有没有其他方法在发送之前对数据进行urlencode,所以我没有获得400?

Sim*_*onJ 6

urllib.urlencode() 可以获取元组列表,允许您为参数指定多个值:

>>> urlencode([("var", "value"), ("var", "value2")])
'var=value&var=value2'
Run Code Online (Sandbox Code Playgroud)

或者使用带有列表的地图作为值:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

你甚至可以允许列表字符串作为值,尽管它变得不那么简洁:

>>> 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'
Run Code Online (Sandbox Code Playgroud)