2017-03-28 5 views
0

Ich versuche, einen Rest API Client für das Gespräch mit einem unserer Dienste zu erstellen. Jede Anfrage muss einen Autorisierungsheader enthalten, der von Epoch Times, Request Verb, Daten, Pfad etc. kompromittiert ist.Header automatisch zu Python hinzufügen Anfragen Anfragen

Ich versuche das Python Requests Modul so nahtlos wie möglich zu benutzen, bin aber unsicher, der beste Weg zu " injizieren "einen Header in jede Anfrage.

Es scheint ein Konzept von "Hooks" in Anfragen zu geben, aber derzeit gibt es nur einen "Response" Hook.

Ich erwog, das Session-Objekt zu erweitern und die "send" -Methode zu überschreiben, den Header hinzuzufügen und ihn dann an die super (Session.send) -Methode weiterzuleiten.

Mein Python ist nicht fantastisch, wenn es um OOP und Vererbung kommt, aber das ist, was ich

class MySession(Session): 
    def __init__(self, access_id=None, access_key=None): 
     self.access_id = access_id 
     self.access_key = access_key 
     super(MySession, self).__init__() 

    def send(self, request, **kwargs): 
     method = request.method 
     path = urlparse(request.url).path 

     request.headers['Authorization'] = self.__create_security_header(method, path) 
     request.headers['Content-Type'] = "application/json" 

     return Session.send(self, request, **kwargs) 

Antwort

0

versucht haben, ich denke, Sie nicht die send Methode außer Kraft setzen müssen, da Sie bereits außer Kraft gesetzt haben die __init__.

class MySession(Session): 

    def __init__(self, access_id=None, access_key=None): 
     super(MySession, self).__init__() 
     self.access_id, self.access_key = access_id, access_key 

     # provided __create_security_header method is defined 
     self.headers['Authorization'] = self.__create_security_header(method, path) 
     self.headers['Content-Type'] = "application/json" 

Wahrscheinlich sollte das tun.

+0

Erstellt das aber einen neuen Header für jede Anfrage? Da der Header ein Hash der Methode, URI usw. ist, muss er generiert werden, bevor die Anfrage gesendet wird. –