2017-02-10 56 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編碼?還要別的嗎? –