gpt4 book ai didi

Python 请求 : Using lists when specifying parameters

转载 作者:行者123 更新时间:2023-11-30 23:09:30 25 4
gpt4 key购买 nike

尝试从 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 的身份验证。当我向pairs_oanda提供一种货币对(例如“EUR_USD”)时,它工作正常,产生以下网址:

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=*******

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

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

有没有办法让请求以不同的方式解析列表?

最佳答案

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'

关于Python 请求 : Using lists when specifying parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com