-1

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

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

但是,当我调用 时authorization_url(),它使用oauth_token而不是token该参数。目前我正在使用format()自己格式化 URL,但现在我同时拥有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))
4

1 回答 1

1

authorization_url()函数是一个便利函数,它调用通用函数将查询参数添加到 url(OAuthLibcommon.add_params_to_uri()又使用urlparse.urlunparse())。没有办法authorization_url()省略oauth_token参数。

返回的类型是 a 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'])
于 2017-02-10T03:17:07.980 回答