2017-02-10 9 views
-1

requests-oauthlib을 사용하여 ETrade API를 인증합니다. 내가 authorization_url()를 호출 할 때requests-oauthlib을 사용하여 인증 URL 형식 수정

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

그러나, 그것은 oauth_token 대신 해당 매개 변수에 대한 token 사용은 다음과 같은 형식을 가지고 인증 URL이 필요합니다. 현재 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에 쿼리 매개 변수를 추가하는 일반적인 함수를 호출하는 편리한 기능입니다 (다시 urlparse.urlunparse()를 사용 OAuthLib의 common.add_params_to_uri()) : 완성도를 들어

, 여기에 내 코드입니다. 에 oauth_token 매개 변수를 입력하지 않아도되는 방법은 없습니다.

반환되는 형식은 str (Python 3)이므로 URL과 토큰에 유효한 문자 만 포함되어있는 한 확실한 문자열 형식 호출을 사용하여 동일한 결과를 얻을 수 있습니다 당신의 기능에서 끝났어.

그러나 추가 oauth_token 매개 변수가 문제가되지 않는다면 제공된 추가 안전을 위해 authorization_url() 기능을 사용하는 것이 좋습니다. 지금까지 내가 말할 수있는

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

또한,이 함수에 추가 str.format() 전화를 할 다음 필요하다 authorization_url()kwargs 이러한 매개 변수를 지정하는 데 사용할 수 있습니다 소요 '매개 변수가 아무런 문제를 일으키지 않습니다. 'authorization_url() '이 제공하는 추가 안전성에는 어떤 것이 있습니까? 토큰을 URL 인코딩합니까? 다른 건 없니? –