Python - Requêtes HTTP personnalisées

Le protocole HTTP (Hypertext Transfer Protocol) est un protocole utilisé pour permettre les communications entre les clients et les serveurs. Il fonctionne comme un protocole de demande-réponse entre un client et un serveur. Le périphérique demandeur est appelé client et le périphérique qui envoie la réponse est appelé serveur.

L'urllib est la bibliothèque python traditionnelle qui est utilisée dans les programmes python pour gérer les requêtes http. Mais maintenant, il y a urllib3 qui fait plus que ce que faisait urllib. Nous importons la bibliothèque urllib3 pour voir comment python peut l'utiliser pour faire une requête http et recevoir une réponse. Nous pouvons personnaliser le type de demande en choisissant la méthode de demande.

Pip install urllib3

Exemple

Dans l'exemple ci-dessous, nous utilisons l'objet PoolManager () qui s'occupe des détails de connexion de la requête http. Ensuite, nous utilisons l'objet request () pour faire une requête http avec la méthode POST. Enfin, nous utilisons également la bibliothèque json pour imprimer les valeurs reçues au format json.

import urllib3
import json
http = urllib3.PoolManager()
r = http.request(
    'POST',
    'http://httpbin.org/post',
    fields={'field': 'value'})
print json.loads(r.data.decode('utf-8'))['form']

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

{field': value'}

URL utilisant une requête

Nous pouvons également transmettre des paramètres de requête pour créer des URL personnalisées. Dans l'exemple ci-dessous, la méthode de requête utilise les valeurs de la chaîne de requête pour compléter l'URL qui peut être utilisée par une autre fonction du programme python.

import requests
 
query = {'q': 'river', 'order': 'popular', 'min_width': '800', 'min_height': '600'}
req = requests.get('https://pixabay.com/en/photos/', params=query)
 
print(req.url)

Lorsque nous exécutons le programme ci-dessus, nous obtenons la sortie suivante -

https://pixabay.com/en/photos/?q=river&min_width=800&min_height=600&order=popular