Outils pour utilisateurs

Outils du site


stu:python_reseau:requests

Module requests

Le module requests est un module Python faisant office de client HTTP. Il remplacera avantageusement le module standard urllib.

Proxies

L'utilisation d'un proxy est nécessaire depuis un site de l'Université. Partout, dans la suite, on supposera que les réglages suivants ont été faits :

proxies = {'http': 'http://cache.univ-poitiers.fr:3128', 
           'https': 'http://cache.univ-poitiers.fr:3128'
           }

Pour certaines fonctions, on passera le dictionnaire en paramètres (le paramètre s'appelle proxy). Si on n'utilise pas de proxy, on peut ne pas passer ce paramètres, ou passer un dictionnaire vide :

proxies = {}

Simple requêtes

import requests
url = "http://api.openweathermap.org/data/2.5/weather?q=Poitiers,fr"
r = requests.get(url, proxies=proxies)
print(r.json())

La réponse r contient les propriétés:

  • ok, un booléen qui indique si le code de retour est bien 200
  • text : une chaîne contenant la page encodée en utf8 (le transcodage est effectué en se basant sur les infos fournies dans l'entête)
  • headers : contient les en-têtes HTTP
  • cookies : contient les cookies
  • content : contenu (octets) de la réponse

La méthode r.json() permet d'interpréter le contenu de la page et de renvoyer un dictionnaire si la page était au format json.

Plutôt qu'encoder soi même les paramètres dans l'URL, on peut passer un dictionniare :

url = "http://api.openweathermap.org/data/2.5/weather"
r = requests.get(url, params = {'q': 'Poitiers,fr'}, proxies=proxies)

Cookies

On peut passer des cookies dans une requêtes en envoyant le paramètre cookies (un dictionnaire) :

r = requetes.get(url, cookies = {'idsession' : 'I98E234', 'name': 'Toto'})

De même on peut récupérer le contenu des cookies renvoyés ainsi :

r = requetes.get(url)
print(r.cookies)

Sessions

Dans le cas où on doit renvoyer les cookies stockés (suivi de session), il existe un moyen plus simple de procéder :

sess = requests.Session()
 
s.get(....)
s.get(....) # le second s.get resservira les cookies stockés lors du premier s.get

Authentification

On peut passer en paramètre à une requêtes get le paramètre auth, qui précise la méthode d'authentification à employer.

Ce paramètre peut être un objet de type HTTPBasicAuth, HTTPDigestAuth (sous module requetes.auth ou bien OAuth1 (module tiers requests_oauthlib).

Exemple :

import requests
imoprt requests.auth 
url=...
auth = request.auth.HTTPBasicAuth('nomdutilisateur','modepasse')
r = requests.get(url, auth=auth)

On pourra trouver un exemple d'utilisation de requests_oauthlib ici : API Twitter en Python 3

Requêtes POST

On peut naturellement réaliser des requêtes post plutôt que get. On ajoutera alors le dictionnaire data en paramètres :

r = requests.post(url, data={'loginform': 'archibald', 'password': 'hdck'}

Un fichier complet peut être envoyé par le biais du paramètre files:

# f est un descripteur de fichiers
r = requests.post(url, file = {'file': f})

</code>

Divers

Transmission d'entêtes avec la requête :

r = requests.get(url, headers={'content-type': 'text/html'})

Le paramètre allow_redirects active ou non les redirections (codes de retour ''3XX'')

stu/python_reseau/requests.txt · Dernière modification: 2014/11/12 13:05 (modification externe)