2017-01-05 4 views
2

У меня есть ряд функций, которые совершают вызовы на api, используя requests. Таким образом, количество вызовов, подобных приведенному ниже (упрощено для данного примера):Лучший способ аутентификации всех запросов?

requests.get(url, data=data, auth=('user','password')) 

Все просьбы будут заверены и я хотел бы найти более рациональный способ аутентификации все запрос, а не просто в том числе auth=('user','password') часть в каждом звонке.

Моя первая мысль заключалась в том, чтобы создать подкласс, который наследуется от класса requests, а затем переопределить функцию get. Что-то, как показано ниже:

class authRequests(requests): 
    def get(url, data): 
    return requests.get(url, data=data, auth=('user', 'password')) 

, а затем использовать authRequests.get вместо requests.get. У меня нет опыта работы с python, поэтому это может быть не рабочий пример, но мне интересно, будет ли это правильный подход или я должен использовать другой метод для этого?

ответ

2

Вы должны использовать requests.Session() упорствовать вещи по различным запросам:

Сессия также может быть использована для получения данных по умолчанию для методов запроса. Это делается путем предоставления данных в свойства на Session объекте

with requests.Session() as session: 
    session.auth = ('user', 'password') 

    session.get(url, data=data1) 
    response = session.post(another_url, data=data2) 
+0

Ahh интересно - так что, если у меня есть 15 функций, которые содержат призывы к 'get' могу я просто обернуть все функции с' with' заявлением ? –

+0

@AbeMiessler yup, вам не нужно использовать диспетчер контекста 'with', можно создать экземпляр объекта сеанса и передать его. Если функции являются методами одного и того же класса, вы можете создать экземпляр сеанса как атрибут экземпляра: 'self.session = requests.Session()' и использовать его для запросов 'self.session.get (url, data = data) '... Надеюсь, что это помогает. – alecxe

+0

Красивые - спасибо !!! –

Смежные вопросы