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

代わりに、一連の 2 つの値のタプルを使用します。

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 に答える