Python请求:指定参数时使用列表

2024-04-23 18:02:19 发布

您现在位置:Python中文网/ 问答频道 /正文

试图从Oanda的API获取货币报价。以下是我的代码:

s = requests.Session()
url = "https://stream-fxpractice.oanda.com/v1/prices"
headers = {'Authorization': 'Bearer ' + access_token}
params = {'instruments': pairs_oanda, 'accountId': account_id}
resp = s.get(url, headers=headers, params=params, stream=True)

访问令牌和帐户id是API的身份验证。当我向pairs\u oanda提供一个货币对(例如“EUR\u USD”)时,它可以正常工作,从而产生以下url:

https://streamfxpractice.oanda.com/v1/prices?instruments=GBP_USD&accountId=*******

但是,例如,当我提供货币对列表时

["EUR_USD", "GBP_USD"]

我得到以下网址:

https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD&instruments=GBP_USD&accountId=*******

但是,要正确访问API,我需要的url是:

https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD%2CGBP_USD&accountId=*******

是否有其他方法来获取对列表进行不同解析的请求


Tags: httpscomapiurlstream货币eurheaders
1条回答
网友
1楼 · 发布于 2024-04-23 18:02:19

API希望您使用逗号分隔货币对。你得自己动手;在这里使用str.join()

pairs_oanda = ["EUR_USD", "GBP_USD"]
params = {'instruments': ','.join(pairs_oanda), 'accountId': account_id}

%2C字符序列是编码为URL编码的,

>>> from urlparse import unquote
>>> unquote('%2C')
','

并且requests负责为您引用,前提是您为它提供了未引用的参数值:

>>> from requests import Request
>>> url = "https://stream-fxpractice.oanda.com/v1/prices"
>>> pairs_oanda = ["EUR_USD", "GBP_USD"]
>>> params = {'instruments': ','.join(pairs_oanda), 'accountId': 'foobarbaz'}
>>> r = Request('GET', url, params=params)
>>> r.prepare().url
'https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD%2CGBP_USD&accountId=foobarbaz'

相关问题 更多 >