Maison > développement back-end > Tutoriel Python > Guide de la méthode POST des requêtes Python

Guide de la méthode POST des requêtes Python

Barbara Streisand
Libérer: 2024-11-24 04:33:11
original
393 Les gens l'ont consulté

Guide to Python requests POST method

La bibliothèque de requêtes de Python est un outil de bibliothèque client http puissant qui simplifie la communication API, en particulier pour effectuer des requêtes POST. Que vous créiez une application qui interagit avec des API distantes ou du web scraping, maîtriser la méthode POST avec des requêtes est une compétence fondamentale pour un développement Web efficace.

Ce guide fournit une présentation complète de l'utilisation des requêtes Python pour effectuer des requêtes POST, une méthode cruciale pour envoyer des données aux serveurs. Nous aborderons des exemples, des défis courants et des meilleures pratiques.

Pour ceux qui découvrent la bibliothèque, vous pouvez commencer par l'installer avec les demandes d'installation pip à suivre avec ce guide.

Que sont les requêtes HTTP POST ?

HTTP est l'épine dorsale de la communication entre les clients Web (comme les navigateurs ou les applications) et les serveurs. Ce protocole utilise des requêtes pour échanger des données et il peut y avoir plusieurs types de méthodes :

  • GET : Récupère les données du serveur sans les altérer.
  • POST : Envoie des données au serveur, idéal pour :
    • Création de nouveaux enregistrements (par exemple, comptes d'utilisateurs).
    • Envoi de formulaires ou de saisies utilisateur.
    • Transmission de fichiers ou de données sensibles.
  • PUT : Met à jour les ressources existantes, telles que la modification des profils utilisateur.
  • DELETE : Supprime les ressources spécifiées du serveur.
  • PATCH : Met à jour partiellement les ressources existantes.
  • HEAD : Demande uniquement les en-têtes (méta-informations) d'une réponse sans le corps.
  • OPTIONS : Vérifie quelles méthodes HTTP sont prises en charge par un serveur.

L'utilisation des requêtes POST en Python est essentielle pour les interactions qui envoient des données aux serveurs et il peut y avoir de nombreux cas d'utilisation pour cette méthode — jetons-y un coup d'œil ensuite.

Pourquoi utiliser POST pour la soumission de données ?

Comprendre quand utiliser POST par rapport à d'autres méthodes HTTP est essentiel dans le développement Web. Contrairement à GET, qui envoie des données dans le cadre de paramètres d'URL limités, POST envoie des données via le corps de la requête. Cela permet de prendre en charge des charges utiles plus importantes et de garder les données cachées pour des raisons de sécurité. Cela rend la méthode POST idéale pour :

  • Créer un nouvel enregistrement : Ajouter un nouvel utilisateur, publier un commentaire ou télécharger un document.
  • Soumission des données du formulaire : lorsque les utilisateurs soumettent des informations via un formulaire de contact, un formulaire de recherche ou la configuration d'un compte.
  • Transmission de données sensibles : contrairement à GET, les requêtes POST n'affichent pas de paramètres dans l'URL, offrant une couche de sécurité supplémentaire pour les informations sensibles.

Avec une compréhension claire de ce que sont les requêtes POST, explorons maintenant comment les envoyer en Python à l'aide de la bibliothèque de requêtes, couvrant les formats essentiels tels que JSON, les données de formulaire et les téléchargements de fichiers.

Utiliser des requêtes Python pour envoyer des requêtes POST

La fonction request.post() est votre principal outil pour envoyer des requêtes POST en Python. Il permet un envoi de données personnalisable et simple en spécifiant l'URL, les en-têtes et les données elles-mêmes. Les types de données les plus courants incluent JSON, les données de formulaire ou les données de corps bruts, tous gérés facilement avec la méthode POST des requêtes Python. Par exemple :

Exemple de publication de requêtes Python de base pour l'envoi d'une requête POST :

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

Copier après la connexion
Copier après la connexion
Copier après la connexion

L'utilisation de request.Session() vous permet de conserver certains paramètres (tels que les cookies ou les en-têtes) sur plusieurs requêtes. Cela peut être crucial lorsque vous travaillez avec des requêtes POST, car le serveur suit souvent l'état actuel du client et peut renvoyer différentes données ou même bloquer les requêtes POST manquant d'en-têtes ou de cookies spécifiques.

Différents types de contenu

L'en-tête HTTP Content-Type est essentiel dans les requêtes POST car il spécifie le format des données envoyées, ce qui garantit que le serveur peut interpréter correctement la requête.

Certains serveurs prennent en charge plusieurs types de contenu POST, tandis que d'autres nécessitent des formats spécifiques. Voici quelques en-têtes Content-Type courants et à quoi ils servent :

  • application/json représente le format JSON couramment utilisé dans la communication API.
  • application/x-www-form-urlencoded utilisé dans les soumissions de formulaires HTML, codant les données sous forme de paires clé-valeur codées en URL.
  • multipart/form-data conçu pour le téléchargement de fichiers, prenant en charge des contenus mixtes tels que des fichiers binaires et du texte en une seule requête.

Pour définir l'en-tête Content-Type dans les requêtes python, utilisez le paramètre headers :

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans cet esprit, examinons ensuite les formats de données les plus couramment utilisés dans les requêtes POST.

Comment publier des données JSON

JSON (JavaScript Object Notation) est un format couramment utilisé pour la communication API car il est facilement structuré et analysé. Il est disponible nativement en JavaScript et en Python, il peut être facilement converti en dictionnaire Python à l'aide du module json.

Utiliser la bibliothèque de requêtes pour envoyer des requêtes Python POST avec des données JSON est simple. Utilisez le paramètre json dans request.post(), qui gère automatiquement l'encodage et définit l'en-tête Content-Type :

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

Copier après la connexion
Copier après la connexion
Copier après la connexion

JSON est de loin le type de données POST le plus populaire, souvent rencontré dans des scénarios tels que :

  • Authentification utilisateur : Lors de la connexion ou de l'inscription, JSON est utilisé pour envoyer des informations d'identification et recevoir des jetons d'authentification.
  • Récupération et soumission de données : les API permettant de récupérer ou de mettre à jour des données, telles que la météo, les cours des actions ou les profils d'utilisateurs, répondent généralement avec JSON et nécessitent souvent JSON pour envoyer des mises à jour.
  • Paramètres de configuration : De nombreuses applications utilisent JSON pour envoyer ou recevoir des détails de configuration, permettant une configuration flexible en fonction des préférences de l'utilisateur ou des exigences du système.
  • Soumissions de formulaires dans les applications Web : JSON est également courant dans les applications où des formulaires ou des entrées utilisateur sont soumis, telles que des enquêtes ou des transactions de commerce électronique.

Comment publier des données de formulaire

Les données de formulaire sont utilisées lorsque les utilisateurs interagissent avec les champs de saisie d'une page Web comme :

  • Effectuer la connexion
  • Soumettre une recherche
  • Soumettre du contenu généré par l'utilisateur comme des commentaires ou des publications

Les données du formulaire envoient des données avec l'en-tête Content-Type application/x-www-form-urlencoded et encodent les données URL dans un format clé-valeur. Voyons un exemple de POST de données de formulaire avec des requêtes Python pour mieux comprendre ce format :

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans l'exemple ci-dessus, l'en-tête Content-Type est automatiquement défini lorsque nous utilisons un dictionnaire Python comme paramètre de données. Sinon, si nous transmettons une chaîne, nous devons définir manuellement l'en-tête Content-Type.

Envoi de fichiers

Pour envoyer des fichiers à l'aide de la bibliothèque de requêtes de Python, le paramètre files peut être utilisé. Ce paramètre prend des octets de données et définit automatiquement l'en-tête Content-Type sur multipart/form-data. Ceci est utile pour télécharger des images, des documents ou du contenu multimédia. Jetons un coup d'œil à quelques exemples de comment télécharger un fichier à l'aide de requêtes Python POST :

import requests

data = {'username': 'ziad', 'password': '1234'}
response = requests.post('https://httpbin.dev/api', json=data)

Copier après la connexion
Copier après la connexion

Ci-dessus, nous voyons que nous pouvons soit fournir un objet fichier pour les demandes de diffusion des données vers le serveur, soit fournir directement des données d'octets.

Gestion des réponses POST en Python

Après avoir effectué une requête POST, c'est une bonne pratique de vérifier la réponse pour détecter les erreurs ou les méta-notes. Pour cela, l'objet Response des requêtes fournit des attributs tels que status_code, headers et json() qui aident à évaluer le succès ou à diagnostiquer les problèmes.

Pour commencer, inspectez réponse.status_code pour vérifier si une requête POST réussie a été effectuée avec la réponse 200 OK. Sinon, référez-vous à ce tableau pratique ci-dessous.

Problèmes courants de réponse POST et comment les résoudre

Status Code Issue Description Solution
400 Bad Request Incorrect data or syntax error The server couldn't process the request due to data format issues. Check the data format and headers (e.g., Content-Type) for correctness.
401 Unauthorized Missing or invalid authentication The request lacks valid authentication credentials. Include valid API keys or tokens in headers.
403 Forbidden Access denied The server refuses to authorize the request. Verify permissions and check the API documentation for access requirements.
404 Not Found Incorrect URL The server cannot find the requested endpoint. Double-check the endpoint URL for typos and ensure it’s valid.
405 Method Not Allowed Unsupported HTTP method The endpoint does not support the HTTP method used. Confirm the correct HTTP method is used by consulting the API documentation.
500 Internal Server Error Server-side error A generic error indicating an internal server issue. Retry the request; contact API support if the issue persists.
503 Service Unavailable Temporary overload/maintenance The server is temporarily unavailable due to high traffic or maintenance. Wait and retry later; consider implementing retry logic for critical applications.

En surveillant Response.status_code et en incorporant une logique de gestion des erreurs, vous pouvez garantir des interactions robustes et fiables lors des requêtes POST.

Voici un exemple de gestion des codes d'état de réponse :

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

Copier après la connexion
Copier après la connexion
Copier après la connexion

Savoir comment interpréter ces réponses permet de gérer efficacement les erreurs, garantissant ainsi une expérience utilisateur fluide et un dépannage dans les interactions avec l'API.

Publication de données compressées

Pour optimiser la bande passante de transfert de données, vous pouvez POST des données compressées Gzip ou Brotli. Voici un exemple de compression gzip :

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

Copier après la connexion
Copier après la connexion
Copier après la connexion

Pour la compression Brotli, le package brotli peut être utilisé :

import requests

data = {'username': 'ziad', 'password': '1234'}
response = requests.post('https://httpbin.dev/api', json=data)

Copier après la connexion
Copier après la connexion

L'utilisation de la compression réduit la taille de la charge utile considérablement, optimisant la bande passante et améliorant la vitesse des requêtes. Ceci est particulièrement applicable aux formats comme JSON qui peuvent être bien compressés.

Amélioration des performances avec des requêtes POST simultanées

Les requêtes POST, en particulier celles impliquant de grands ensembles de données ou des volumes élevés, peuvent être lentes en raison du temps nécessaire à la transmission des données et au traitement côté serveur. La simultanéité peut atténuer ces retards en permettant à plusieurs requêtes de s'exécuter simultanément, accélérant ainsi les tâches telles que les téléchargements groupés de données ou les interactions API.

Malheureusement, la bibliothèque de requêtes de Python ne prend pas en charge les opérations asynchrones avec asyncio, ce qui limite sa capacité à gérer efficacement de nombreuses requêtes POST simultanées.

C'est là qu'intervient httpx, car il propose un AsyncClient qui s'intègre parfaitement à la boucle d'événements asyncio de Python. Cela signifie que vous pouvez envoyer de nombreuses requêtes simultanément sans blocage, ce qui fait de httpx un choix puissant pour les applications hautes performances qui nécessitent une véritable prise en charge asynchrone.

Vous pouvez également utiliser le threading pour activer les requêtes parallèles dans les requêtes Python. Voici un exemple utilisant un package de threading intégré avec des requêtes :

form_data = {'search': 'product 1 & 2', 'count': 10}
response = requests.post(
    'https://httpbin.dev/post', 
    data=form_data,
)
# this will automatically add the Content-Type header
# and convert data from dictionary to URL encoded format
print(response.request.body)
'search=product+1+%26+2&count=10'
print(response.request.headers['Content-Type'])
'application/x-www-form-urlencoded'

# alternatively if we POST data as string
# we need to manually identify Content-Type
response = requests.post(
    'https://httpbin.dev/post', 
    data='search=product+1+%26+2&count=10'
    headers={
        "Content-Type": "application/x-www-form-urlencoded"
    }
)
print(response.request.body)
'search=product+1+%26+2&count=10'
print(response.request.headers['Content-Type'])
'application/x-www-form-urlencoded'

Copier après la connexion

En utilisant le threading, plusieurs requêtes POST peuvent être lancées en parallèle, permettant à chaque thread de gérer une seule requête.

Vous pouvez en savoir plus sur la concurrence et le parallélisme dans notre article dédié :

Concurrence vs Parallélisme
(https://scrapfly.io/blog/concurrency-vs-parallelism/)

Mettez sous tension avec Scrapfly

Les requêtes HTTP peuvent être difficiles et se compliquer rapidement en raison des exigences du navigateur sans tête ou du blocage du client. Pour cela, Scrapfly peut vous donner un coup de main !

Guide to Python requests POST method

ScrapFly fournit des API de scraping Web, de capture d'écran et d'extraction pour la collecte de données à grande échelle.

  • Contournement de la protection anti-bot - grattez les pages Web sans les bloquer !
  • Rotation des proxys résidentiels - évitez les blocages d'adresses IP et géographiques.
  • Rendu JavaScript - grattez les pages Web dynamiques via les navigateurs cloud.
  • Automatisation complète du navigateur : contrôlez les navigateurs pour faire défiler, saisir et cliquer sur les objets.
  • Conversion de format - grattez au format HTML, JSON, texte ou Markdown.
  • SDK Python et Typescript, ainsi que intégrations d'outils Scrapy et sans code.

FAQ

Pour conclure ce guide, voici les réponses à quelques questions fréquemment posées sur les requêtes python POST.

Comment puis-je inclure des en-têtes personnalisés dans l'utilisation des requêtes Python ?

Passez les en-têtes sous forme de dictionnaire en utilisant le paramètre headers. Notez que les requêtes génèrent automatiquement certains en-têtes tels que User-Agent, Content-Length et Content-Type, alors soyez prudent lorsque vous les remplacez.

Quelle est la différence entre les paramètres data et json dans les requêtes Python ?

les données sont destinées aux données codées sous forme de formulaire (par défaut) ou brutes (lorsque l'en-tête Content-Type est remplacé). Alors que json est spécifiquement destiné aux données au format JSON et définit automatiquement Content-Type sur application/json.

La bibliothèque de requêtes Python prend-elle en charge les requêtes POST asynchrones ?

Malheureusement, la bibliothèque de requêtes ne prend pas en charge les requêtes asynchrones. Cependant, la bibliothèque httpx est une alternative qui offre des fonctionnalités asynchrones, ce qui la rend adaptée aux applications nécessitant une simultanéité.

Résumé

Dans cet article, nous avons examiné en profondeur la méthode POST des requêtes en Python et appris :

  • Comment les requêtes POST sont-elles utilisées pour envoyer des données à des serveurs de différents types comme JSON, les données de formulaire et les téléchargements de fichiers.
  • Comment gérer les réponses aux requêtes POST et les codes d'état courants et comment les corriger.
  • Comment améliorer les performances avec des requêtes POST simultanées à l'aide de httpx ou du threading pour les requêtes parallèles.
  • Comment compresser les données pour une bande passante et une vitesse optimisées à l'aide des modules gzip et brotli.

Il y a beaucoup plus à apprendre sur les requêtes Python et les requêtes POST, mais avec ce guide, vous êtes bien équipé pour commencer à créer des applications robustes et des grattoirs Web qui interagissent efficacement avec les API et les serveurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal