2017-02-10 78 views
-1

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

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)) 

回答

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']) 
+0

据我所知道的,额外的'的oauth_token '参数不会导致任何问题。 'authorization_url()'提供了什么额外的安全性?它是否对令牌进行URL编码?还要别的吗? –