2016-06-23 5 views
6

Ich habe eine Rails 4-Anwendung, die tokenbasierte Authentifizierung für APIs verwendet und in der Lage sein muss, Datensätze über Python 3-Skript zu aktualisieren.So verwenden Sie Anfragen zum Senden einer PATCH-Anfrage mit Kopfzeilen

Meine aktuelle Skript sieht wie folgt aus

import requests 
import json 

url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload) 

die OK funktioniert, wenn ich API-Authentifizierung deaktivieren.

Ich kann nicht herausfinden, wie Sie Header hinzufügen, requests.patch nimmt nur zwei Parameter nach docs.

ich brauchen würde, um den Punkt zu kommen, wo die Informationen folgende Kopf

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"' 

Diese Art von Kopf OK arbeitet in curl hinzugefügt würde. Wie kann ich dies in Python 3 und Anfragen tun?

+0

Sie tatsächlich Did * versuchen * Hinzufügen von '' headers =? Was ist passiert? – jonrsharpe

+0

Ich habe etwas müde wie 'headers = {'Authorization': 'Token', 'Token': 'xxxxxx'}' dann 'r = requests.patch (URL, Payload, Header = Header)' aber nichts passiert, kein Fehler in Python keine Reaktion von WebRick auf Rails Seite. Versuche, mit Logs zu spielen, um zu sehen, worum es geht. –

Antwort

5

patch kwargs nimmt, nur = Header passieren {your_header}:

def patch(url, data=None, **kwargs): 
    """Sends a PATCH request. 

    :param url: URL for the new :class:`Request` object. 
    :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. 
    :param \*\*kwargs: Optional arguments that ``request`` takes. 
    :return: :class:`Response <Response>` object 
    :rtype: requests.Response 
    """ 

    return request('patch', url, data=data, **kwargs) 

Sosomething wie:

head = {"Authorization":"Token token=xxxxxxxxxxxxxxxxxxxxxx"} 
url = 'http://0.0.0.0:3000/api/v1/update_experiment.json' 
payload = {'expt_name' : 'A60E001', 'status' : 'done' } 

r = requests.patch(url, payload, headers=head) 
+0

Hallo. Ich habe versucht 'headers = {'Authorization': 'Token', 'token': 'xxxxxx'}' dann 'r = requests.patch (url, payload, headers = headers)' aber Rails scheint das nicht zu mögen. Authentifizierung schlägt fehl. Wie kann ich sehen, was Python tatsächlich sendet und wie man den Header überprüft? Ich habe 'print (r.headers)' gebunden, aber das beinhaltet keine der Informationen, die ich als Header übergeben habe. –

+0

@BartC Beachten Sie, dass dies nicht das Format der Header ist - lesen Sie das letzte Code-Snippet erneut. – jonrsharpe

+1

@PadraicCunningham Enormes Dankeschön !!!!, das hat super geklappt, das Detail verpasst/habe es einfach nicht bekommen, das war der Schuldige die ganze Zeit in vielen meiner anderen Versuche, es zum Laufen zu bringen. Danke noch einmal. –

Verwandte Themen