python-requreds:订购获取参数
-
26-10-2019 - |
题
我正在使用私人http-api实施客户库 Python请求. 。 API(我不控制)期望参数处于一定顺序,但是Python-Requeests并未将分类为参数进行尊重。
这就是我尝试的:
import requests
from django.utils.datastructures import SortedDict
params = SortedDict()
params['s'] = 'value1'
params['f'] = 'value2'
requests.get('https://example.org/private_api', params=params)
#performs request as https://example.org/private_api?f=value1&s=value2
这就是我要避免的:
requests.get('https://example.org?{0}'.format(urlencode(params)))
解决方案
当前请求不允许按照您的意愿执行此操作。当然,这将是 固定的. 。但是 params
参数不仅可以使用字典,而且可以采用字节,您也应该能够在两者之间做一些事情:
from collections import OrderedDict
from urllib import urlencode
import requests
params = OrderedDict([('first', 1), ('second', 2), ('third', 3)])
requests.get('https://example.org/private_api', params=urlencode(params))
由于models.py的第85行中的错误: self.params = dict(params or []
。我提出了这个问题 错误地处理给定为字节对象的参数
其他提示
请求LIB现在支持此开箱即用:要获取有序参数,您可以使用一组两个值的元素。这消除了订购的附加要求。
payload = (('key1', 'value1'), ('key2', 'value2'))
r = requests.get("http://httpbin.org/get", params=payload)
演示:
>>> import requests
>>> requests.__version__
1.2.3
>>> payload = (('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'))
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> print r.json()['url']
http://httpbin.org/get?key1=value1&key2=value2&key3=value3
第85行 requests/models.py
(关联)转 params
对象进入平原 dict
, ,而不是 SortedDict
您通过了。除非您修补库,否则我认为您无法做自己想做的事。
self.params = dict(params or [])
我发现这有效 1.2.3
也 2.0.0
>>> import requests
>>> requests.__version__
'2.0.0'
>>> data = [('first', 1), ('second', 2), ('third', 3)]
>>> requests.get('http://example.org/private_api', data=data).request.body
'first=1&second=2&third=3'
它与版本2.2.0一起使用:
import requests
yourparams = {'s' : 'value1', 'f': 'value2'}
test = requests.get('https://example.org/private_api', params=yourparams)
print(test.url)
更多细节?请检查 这里.
不隶属于 StackOverflow