2

我需要向其发出请求的 API 需要指定顺序的参数。起初我用过requestslib

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

就像文件中所说的那样。requests不采用显式参数

r = requests.get("http://httpbin.org/get", param1=payload1, param2=payload2)

在我直接尝试了 urllib3 之后,它返回了我上面的错误。从错误:

def request_encode_body(self, method, url, fields=None, headers=None,

如何在 Python 中按指定顺序设置 http 请求参数,任何库。

4

1 回答 1

7

改为使用一系列二值元组:

payload = (('key1', 'value1'), ('key2', 'value2'))
r = requests.get("http://httpbin.org/get", params=payload)

使用字典时不保留顺序的原因requests是因为 python 字典没有顺序。另一方面,元组或列表确实如此,因此可以保留顺序。

演示:

>>> payload = (('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'))
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print r.json
{u'url': u'http://httpbin.org/get?key1=value1&key2=value2&key3=value3', u'headers': {u'Content-Length': u'', u'Accept-Encoding': u'gzip, deflate, compress', u'Connection': u'keep-alive', u'Accept': u'*/*', u'User-Agent': u'python-requests/0.14.1 CPython/2.7.3 Darwin/11.4.2', u'Host': u'httpbin.org', u'Content-Type': u''}, u'args': {u'key3': u'value3', u'key2': u'value2', u'key1': u'value1'}, u'origin': u'109.247.40.35'}
于 2012-11-12T21:56:25.307 回答