web-dev-qa-db-fra.com

Comment utiliser les demandes pour envoyer une demande PATCH avec des en-têtes

J'ai une application Rails 4 qui utilise l'authentification basée sur des jetons pour les API et doit pouvoir mettre à jour les enregistrements via le script Python 3).

Mon script actuel ressemble à ceci

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)

qui fonctionne bien si je désactive l'authentification API.

Je ne sais pas comment y ajouter des en-têtes, requests.patch ne prend que deux paramètres selon les documents.

Je devrais arriver au point où les informations d'en-tête suivantes seraient ajoutées

'Authorization:Token token="xxxxxxxxxxxxxxxxxxxxxx"'

Ce type d'en-tête fonctionne correctement en boucle. Comment puis-je le faire dans Python 3 et requêtes?

11
Bart C

patch prend kwargs, passez juste les en-têtes = {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)

Quelque chose comme:

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)
12
Padraic Cunningham