2016-06-23 17 views
6

Mam aplikację Rails 4, która używa uwierzytelniania opartego na tokenie dla API i musi być w stanie aktualizować rekordy za pomocą skryptu Python 3.Jak korzystać z żądań wysłania żądania PATCH z nagłówkami

Mój obecny scenariusz wygląda tak

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) 

który działa OK, jeśli wyłączyć uwierzytelnianie API.

Nie mogę dowiedzieć się, jak dodać do niego nagłówki.

musiałbym dostać się do punktu, w którym po informacji nagłówka będzie dodany

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"' 

Ten typ nagłówka działa OK w dyni. Jak mogę to zrobić w Pythonie 3 i żądań?

+0

Czy rzeczywiście spróbować * * dodawanie nagłówków = ''? Co się stało? – jonrsharpe

+0

Zmęczony czymś takim jak 'headers = {'Authorization': 'Token', 'token': 'xxxxxx'}' następnie 'r = requests.patch (url, payload, headers = headers)', ale nic się nie dzieje, nie ma błędu w Pythonie, brak reakcji ze strony WebRick po stronie Rails. Próbujesz grać z logami, aby zobaczyć, co się dzieje. –

Odpowiedz

5

patch trwa kwargs, po prostu przekazać nagłówki = {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 jak:

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

Witam. Próbowałem 'headers = {'Authorization': 'Token', 'token': 'xxxxxx'}' then 'r = requests.patch (url, payload, headers = headers)', ale Rails nie lubi tego. Uwierzytelnianie nie udaje się. Jak mogę zobaczyć, co faktycznie wysyła Python, jak sprawdzić nagłówek. Związałem 'print (r.headers)', ale to nie zawiera żadnych informacji, które przekazałem jako nagłówki. –

+0

@BartC pamiętać, że to nie jest w pełni format nagłówków - ponownie przeczytaj ten ostatni fragment kodu. – jonrsharpe

+1

@PadraicCunningham Enormous Thanks !!!!, które działało świetnie, brakowało tego szczegółu/po prostu nie dostałem tego, co było przyczyną wszystkich moich innych prób, aby to zadziałało. Dzięki jeszcze raz. –

Powiązane problemy