Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python urllib2发送POST数据_Python_Http - Fatal编程技术网

Python urllib2发送POST数据

Python urllib2发送POST数据,python,http,Python,Http,我试图使用urllib发送POST数据,但问题通常是您对字段字典进行urlencode编码,然后将其与请求一起发送。但是我必须发送到服务器的一些字段的名称完全相同,因此使用字典我最终会从字典中删除很多数据,因为不能有两个具有相同名称和不同数据的键 我有一个字符串格式的请求数据,语法正确。var=value&var=value2&。。。我尝试将其与我的urllib请求一起发送,但每次都收到一个错误的请求。是否有其他方法在发送之前对数据进行urlencode编码,这样我就不会得到400?urllib

我试图使用urllib发送POST数据,但问题通常是您对字段字典进行urlencode编码,然后将其与请求一起发送。但是我必须发送到服务器的一些字段的名称完全相同,因此使用字典我最终会从字典中删除很多数据,因为不能有两个具有相同名称和不同数据的键

我有一个字符串格式的请求数据,语法正确。var=value&var=value2&。。。我尝试将其与我的urllib请求一起发送,但每次都收到一个错误的请求。是否有其他方法在发送之前对数据进行urlencode编码,这样我就不会得到400?

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'
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'

您确定400是由于POST数据格式而不是其他原因(例如,用户代理标头)吗?您确定400是由于POST数据格式而不是其他原因(例如,用户代理标头)?