Comment utiliser httpx, un client web pour Python

-

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.

Alfred
Alfredhttps://www.alfreddagenais.com
Salut ! Moi, c'est Alfred, développeur dans l’âme et explorateur de l'infini Web. Je suis constamment à la recherche de nouvelles idées et je pense que le développement web et l'informatique ont le pouvoir de transformer le monde. Je suis un grand admirateur de l'expérimentation, parce que c'est souvent de là que naissent les idées les plus créatives. Je suis convaincu que l'humour est un ingrédient clé de la vie, alors j'essaie toujours de glisser une blague ou deux dans mon code (pas toujours facile à comprendre, mais c'est le risque à prendre). En dehors de la programmation, j'aime passer du temps avec ma famille et mes amis, découvrir de nouveaux endroits et cuisiner des plats délicieux (du moins, j'essaie). Si vous voulez discuter de développement web, d'innovation, ou tout simplement échanger des blagues, n'hésitez pas à me contacter. Je suis toujours partant pour une bonne conversation !

Share this article

Recent posts

Popular categories

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Recent comments