首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-requests: order get参数

python-requests: order get参数
EN

Stack Overflow用户
提问于 2012-01-10 20:01:31
回答 5查看 56.8K关注 0票数 21

我正在使用python requests实现一个私有HTTP的客户端库。API(我不能控制)要求参数按一定的顺序排列,但是python-request不会将已排序的dict作为参数。

这是我尝试过的:

代码语言:javascript
复制
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 

这就是我想要避免的:

代码语言:javascript
复制
requests.get('https://example.org?{0}'.format(urlencode(params)))
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-10 20:34:35

目前,requests不允许您这样做。这当然是fixed的缺点。但是,由于params参数不仅可以接受字典,还可以接受字节,因此您应该能够在两者之间执行某些操作:

代码语言:javascript
复制
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:self.params = dict(params or []的第85行出现了错误。我在issue Wrong handling of params given as bytes object中提出了这个问题

票数 14
EN

Stack Overflow用户

发布于 2013-08-28 22:23:54

requests lib现在支持这种开箱即用的方式:要获得有序参数,可以使用一系列二值元组。这消除了对OrderedDict的额外要求。

代码语言:javascript
复制
payload = (('key1', 'value1'), ('key2', 'value2'))
r = requests.get("http://httpbin.org/get", params=payload)

演示:

代码语言:javascript
复制
>>> 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
票数 27
EN

Stack Overflow用户

发布于 2014-02-02 19:13:25

它与2.2.0版一起使用:

代码语言:javascript
复制
import requests
yourparams = {'s' : 'value1', 'f': 'value2'}

test = requests.get('https://example.org/private_api', params=yourparams)
print(test.url)

更多细节?敬请关注here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8802945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档