Le paquet httpx pour Python est un client web sophistiqué. Une fois que vous l’avez installé, vous pouvez l’utiliser pour obtenir des données à partir de sites web. Comme d’habitude, la façon la plus simple de l’installer est d’utiliser l’utilitaire pip :
python -m pip install httpx --user
Pour l’utiliser, importez-le dans un script Python, puis utilisez la fonction .get pour récupérer les données d’une adresse web :
import httpx result = httpx.get("https://httpbin.org/get?hello=world") result.json()["args"]
Voici le résultat de ce simple script :
{'hello': 'world'}
Réponse HTTP
Par défaut, httpx ne lève pas d’erreur sur un statut non-200.
Essayez ce code :
result = httpx.get("https://httpbin.org/status/404") print(result)
Le résultat :
Il est possible de lever une réponse de manière explicite. Ajoutez ce gestionnaire d’exception :
try: result.raise_for_status() except Exception as exc: print("woops", exc)
Voici le résultat :
woops Client error '404 NOT FOUND' for url 'https://httpbin.org/status/404'
For more information check: https://httpstatuses.com/404
Client personnalisé
Il est intéressant d’utiliser un client personnalisé pour tout ce qui n’est pas le script le plus simple. En dehors des améliorations de performance, comme la mise en commun des connexions, c’est un bon endroit pour configurer le client.
Par exemple, vous pouvez définir une URL de base personnalisée :
client = httpx.Client(base_url="https://httpbin.org") result = client.get("/get?source=custom-client") result.json()["args"]
Exemple de sortie :
{'source': 'custom-client'}
Ceci est utile pour un scénario typique où vous utilisez le client pour parler à un serveur spécifique. Par exemple, en utilisant à la fois base_url et auth, vous pouvez construire une belle abstraction pour un client authentifié :
client = httpx.Client( base_url="https://httpbin.org", auth=("good_person", "secret_password"), ) result = client.get("/basic-auth/good_person/secret_password") result.json()
Sortie :
{'authenticated': True, 'user': 'good_person'}
Une des choses les plus agréables que vous pouvez utiliser est de construire le client dans une fonction « main » de haut niveau et de le faire circuler. Cela permet aux autres fonctions d’utiliser le client et de faire des tests unitaires avec un client connecté à une application WSGI locale.
def get_user_name(client): result = client.get("/basic-auth/good_person/secret_password") return result.json()["user"] get_user_name(client) #> 'good_person' def application(environ, start_response): start_response('200 OK', [('Content-Type', 'application/json')]) return [b'{"user": "pretty_good_person"}'] fake_client = httpx.Client(app=application, base_url="https://fake-server") get_user_name(fake_client)
Sortie :
'pretty_good_person'
Essayez httpx
Visitez python-httpx.org pour plus d’informations, de documentation et de tutoriels. J’ai trouvé que c’était un module excellent et flexible pour interagir avec HTTP. Essayez-le et voyez ce qu’il peut faire pour vous.