tba*_*ack 19 python http-request python-requests
我正在使用python请求实现私有HTTP-API的客户端库.API(我无法控制)期望参数按特定顺序排列,但python-requests不会将排序的dict作为参数.
这是我试过的:
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
Run Code Online (Sandbox Code Playgroud)
这就是我想要避免的:
requests.get('https://example.org?{0}'.format(urlencode(params)))
Run Code Online (Sandbox Code Playgroud)
Jef*_*eld 22
请求lib现在支持这种开箱即用:要获得有序参数,请使用一系列二值元组.这消除了OrderedDict的额外要求.
payload = (('key1', 'value1'), ('key2', 'value2'))
r = requests.get("http://httpbin.org/get", params=payload)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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
Run Code Online (Sandbox Code Playgroud)
Pio*_*ost 13
目前请求不允许您按照自己的意愿执行此操作.这当然是将要修复的缺点.但是,由于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))
Run Code Online (Sandbox Code Playgroud)
由于models.py第85行中的错误,我无法看到这种情况self.params = dict(params or [].我提出了这个问题错误处理作为字节对象给出的params
| 归档时间: |
|
| 查看次数: |
45083 次 |
| 最近记录: |