使用requests-oauthlib修改授权URL格式

时间:2017-02-10 01:44:11

标签: python oauth python-requests etrade-api

我正在使用requests-oauthlib对ETrade API进行身份验证。它要求授权URL具有以下格式:

https://us.etrade.com/e/t/etws/authorize?key={oauth_consumer_key}&token={oauth_token}

但是,当我致电authorization_url()时,它会为该参数使用oauth_token而不是token。目前我正在使用format()自行格式化网址,但现在我同时拥有tokenoauth_token个参数。这有效,但完全不优雅。有没有办法修改authorization_url()的行为以允许我需要的URL格式?

为了完整性,这是我的代码:

oauth_session = requests_oauthlib.OAuth1Session(config.oauth_consumer_key, config.consumer_secret, callback_uri='oob')


def get_request_token():
    path = 'oauth/request_token'
    url = base_url + path
    return oauth_session.fetch_request_token(url)


def get_authorization_url(request_token):
    url_format = 'https://us.etrade.com/e/t/etws/authorize?key={oauth_consumer_key}&token={oauth_token}'
    url = url_format.format(oauth_consumer_key=config.oauth_consumer_key, oauth_token=request_token['oauth_token'])
    return oauth_session.authorization_url(url)

request_token = get_request_token()
print(get_authorization_url(request_token))

1 个答案:

答案 0 :(得分:1)

authorization_url()函数是一个便捷函数,它调用泛型函数将查询参数添加到url(OAuthLib的common.add_params_to_uri(),后者又使用urlparse.urlunparse())。无法让authorization_url()省略oauth_token参数。

返回的类型是str(在Python 3中),因此只要您确定url和令牌只包含有效字符,就可以通过使用普通字符串格式调用获得相同的结果正如你在你的功能中所做的那样。

但是,如果额外的oauth_token参数没有引起任何问题,我建议使用authorization_url()函数来提供额外的安全性。

此外,您无需在函数中执行额外的str.format()调用 - authorization_url()需要kwargs,可用于指定这些参数:

def get_authorization_url(request_token):
    url = 'https://us.etrade.com/e/t/etws/authorize'
    return oauth_session.authorization_url(url,
                                           key=config.oauth_consumer_key, 
                                           token=request_token['oauth_token'])