2017-01-05 9 views
2

私はrequestsを使ってAPIを呼び出す関数をいくつか持っています。だから、類似した呼の数(この例では単純化)下記1:すべてのリクエストを認証する最も良い方法は?

requests.get(url, data=data, 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

面白いああにデータを提供することによって行われ - ので、私は 'GET'への呼び出しが含まれている15個の機能を持っている場合、私はちょうど' WITH'文ですべての機能をラップすることができ? –

+0

@AbeMiesslerあなたは 'with'コンテキストマネージャを使う必要はなく、セッションオブジェクトをインスタンス化して渡すことができます。関数が同じクラスのメソッドである場合、セッションをインスタンス属性としてインスタンス化することができます: 'self.session = requests.Session()'とそれを使って 'self.session.get(url、data = data) '..それが助けてくれることを望みます。 – alecxe

+0

美しい - ありがとう! –

関連する問題