2017-01-05 1 views
2

Ich habe eine Reihe von Funktionen, die Anrufe an eine API mit requests tätigen. So eine Anzahl von Anrufen ähnlich derjenige unten (für dieses Beispiel vereinfacht):Der beste Weg, um alle Anfragen zu authentifizieren?

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

Alle Anforderungen authentifiziert werden werden, und ich möchte eine sauberere Weg finden, alle Anfragen zu authentifizieren und nicht nur mit der auth=('user','password') Teil in jedem Anruf.

Mein erster Gedanke war, eine Unterklasse zu erstellen, die von der requests Klasse erbt und dann die get Funktion überschreiben. So etwas wie unten:

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

und verwenden Sie dann authRequests.get statt requests.get. Ich habe keine Python-Erfahrung, also mag das kein funktionierendes Beispiel sein, aber ich frage mich, ob dies der richtige Ansatz ist oder ob ich eine andere Methode dafür verwenden sollte?

Antwort

2

Sie sollten die requests.Session() verwenden, um Dinge über verschiedene Anfragen zu beharren:

Sessions können auch Standarddaten an die Anforderungsmethoden verwendet werden, um. Dies geschieht durch interessante Daten zu den Eigenschaften auf einem Session Objekt

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

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

Ahh bietet - so, wenn ich 15 Funktionen, die Anrufe zu 'get' enthalten könnte ich alle Funktionen einfach wickeln mit dem' with' Aussage ? –

+0

@AbeMiessler yup, Sie müssen nicht 'mit' Kontextmanager verwenden, können ein Sitzungsobjekt instanziieren und es weitergeben. Wenn die Funktionen Methoden derselben Klasse sind, können Sie die Sitzung als Instanzattribut instanziieren: 'self.session = requests.Session()' und verwenden Sie sie, um Anfragen zu erstellen 'self.session.get (url, data = data) "... das hilft mir. – alecxe

+0

Schön - danke !!! –

Verwandte Themen