2017-02-10 21 views
-1

Я использую requests-oauthlib для аутентификации с помощью API ETrade. Она требует 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-адреса, но теперь у меня есть параметры token и oauth_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-кодирование токенов? Что-нибудь еще? –