Python 请求:指定参数时使用列表
Python Requests: Using lists when specifying parameters
正在尝试从 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)
access_token和account_id是对API的认证。当我提供一种货币对时,例如 "EUR_USD",到 pairs_oanda 它工作正常,导致以下 url:
https://streamfxpractice.oanda.com/v1/prices?instruments=GBP_USD&accountId=*******
但是,例如,当我提供货币对列表时
["EUR_USD", "GBP_USD"]
到pairs_oanda,我得到这个URL:
https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD&instruments=GBP_USD&accountId=*******
但是,我需要 url 看起来像才能正确访问 API 是这样的:
https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD%2CGBP_USD&accountId=*******
有没有办法让 Requests 以不同的方式解析列表?
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'
正在尝试从 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)
access_token和account_id是对API的认证。当我提供一种货币对时,例如 "EUR_USD",到 pairs_oanda 它工作正常,导致以下 url:
https://streamfxpractice.oanda.com/v1/prices?instruments=GBP_USD&accountId=*******
但是,例如,当我提供货币对列表时
["EUR_USD", "GBP_USD"]
到pairs_oanda,我得到这个URL:
https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD&instruments=GBP_USD&accountId=*******
但是,我需要 url 看起来像才能正确访问 API 是这样的:
https://stream-fxpractice.oanda.com/v1/prices?instruments=EUR_USD%2CGBP_USD&accountId=*******
有没有办法让 Requests 以不同的方式解析列表?
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'