【问题标题】:Python Requests: Using lists when specifying parametersPython 请求:指定参数时使用列表
【发布时间】:2015-07-02 20:15:34
【问题描述】:

尝试从 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,我得到这个网址:

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

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

【问题讨论】:

    标签: python python-requests


    【解决方案1】:

    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'
    

    【讨论】:

    • 啊,我们走了。正如您可能知道的那样,该网站有点新。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多