Comprendre le code d'état 428 dans les requêtes HTTP Python
Lorsque vous utilisez Python demandes module, il est courant de rencontrer des codes d'état HTTP qui signalent diverses difficultés avec les réponses du serveur. L'une de ces erreurs est le code d'état 428, qui indique un critère que le serveur doit remplir avant de continuer. Cela est souvent dû à l'incapacité de fournir les en-têtes requis ou d'exécuter les requêtes dans le bon ordre.
Dans ce scénario, un utilisateur tente d'envoyer un POSTE demande à un site Web mais reçoit une réponse 428 au lieu du code d'état 200 prévu. Le script contient des charges utiles et des en-têtes correctement construits, mais un composant essentiel est manquant, ce qui entraîne l'échec de la requête.
De telles erreurs sont fréquentes lors de l'interaction avec les API en ligne, en particulier lorsque le serveur exige des critères supplémentaires avant de traiter les demandes. Comprendre la raison sous-jacente du code d'état 428 est essentiel pour résoudre le problème et fournir des solutions efficaces.
Cet article examinera les causes les plus probables du code d'état 428 dans le script Python fourni et les stratégies viables pour le corriger, garantissant une interaction fluide avec l'API et une réponse de code d'état 200.
Commande | Description des commandes de programmation utilisées |
---|---|
Si-correspond | Cet en-tête garantit que la demande n'est traitée que si la ressource correspond à l'ETag spécifié. C'est critique lorsque le serveur exige qu'une condition préalable soit remplie, empêchant les écrasements ou les modifications involontaires. |
Si-non modifié-depuis | Spécifie que la demande n'aboutira que si la ressource n'a pas été mise à jour depuis la date spécifiée. Il s'agit d'une mesure de prévention des conflits qui garantit qu'aucune modification n'est effectuée après un certain temps. |
requêtes.Session() | UN La séance L’objet permet des paramètres persistants et des cookies sur plusieurs requêtes. Cette approche optimise les requêtes répétées en préservant l'état, tel que les en-têtes et les jetons d'authentification, entre elles. |
session.post() | Pour créer ou modifier une ressource, utilisez le POSTE méthode. Dans cet exemple, il transmet les critères de recherche de vol au format JSON et demande les données de vol à l'API. |
json=charge utile | Utilisé pour inclure un objet JSON dans le corps d'une requête. Dans le script, les données de recherche de vols sont transférées à l'API et traitées. |
session.headers.update() | Cette approche ajoute de nouveaux en-têtes à la session, notamment Agent utilisateur et Autorisation, pour garantir une connexion correcte avec le serveur et éviter des problèmes tels que des en-têtes ou des conditions préalables manquants. |
Référent | En-tête qui identifie la dernière URL visitée par l'utilisateur avant de faire la demande. Elle est fréquemment requise pour des raisons de sécurité ou pour déterminer l'origine de la demande. |
code_statut | Cet attribut vérifie le code de réponse de la requête HTTP. Il est utilisé pour déterminer si la demande a abouti (200) ou si elle a rencontré un problème, tel que l'erreur de condition préalable 428. |
session.get() | La méthode GET obtient des informations du serveur. Il s'agit souvent de la première requête d'une interaction, utilisée pour récupérer les cookies ou jetons requis avant d'envoyer une requête POST. |
Correction du code d'état HTTP 428 dans le module de requêtes de Python
Cette solution exploite Python demandes module, se concentrant sur la résolution du code d'état 428 dans les requêtes POST en fournissant les conditions préalables manquantes telles que les en-têtes ou l'autorisation.
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
# Add If-Match or other required precondition headers
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'application/json, text/plain, */*',
'Referer': 'https://wizzair.com/en-gb',
'If-Match': '<your-etag-here>',
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Missing required precondition.')
Approche alternative : ajout d’une autorisation pour condition préalable
Ce script fournit un jeton d'autorisation pour contourner l'exigence de condition préalable 428 et garantir un accès authentifié à l'API.
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
token = 'Bearer your_auth_token'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
headers = {
'User-Agent': 'Mozilla/5.0',
'Authorization': token,
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Ensure valid authorization or conditions.')
Gestion des champs obligatoires manquants dans les en-têtes
Cette méthode garantit que tous les en-têtes requis sont fournis dans la requête POST pour éviter l'erreur 428 due à des conditions préalables manquantes, telles que Si-non modifié-depuis en-tête.
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
headers = {
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json, text/plain, */*',
'If-Unmodified-Since': 'Wed, 21 Oct 2020 07:28:00 GMT',
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Missing required headers.')
Résolution des problèmes de conditions préalables dans les requêtes HTTP
Lors du traitement des requêtes HTTP, un 428 code d'état indique généralement que le serveur requiert des conditions préalables spécifiques avant de continuer. Omettre les en-têtes de sauvegarde comme Si-correspond ou Si-non modifié-depuis peut conduire à ce problème. Ces en-têtes permettent de vérifier que la requête correspond aux attentes du serveur, réduisant ainsi le risque d'écrasement des données ou d'envoi de requêtes non valides.
Un autre problème important lors de la réception d'un code d'état 428 pourrait être une mauvaise gestion de la session. De nombreuses applications en ligne s'appuient sur la gestion de session pour authentifier les utilisateurs et conserver leur état au fil des requêtes successives. Par exemple, si les données de session ne sont pas conservées, telles que les cookies ou les jetons, le serveur peut refuser la prochaine requête POST. Utilisation des requêtes.Session() de Python permet une gestion correcte de ces sessions, ce qui entraîne une communication plus fluide avec l'API.
Au-delà de la gestion des sessions et des conditions préalables, il est essentiel de garantir le bon flux des en-têtes et des charges utiles. Les serveurs exigent fréquemment des en-têtes de sécurité tels que Autorisation, Référent, et Origine. Leur absence peut entraîner l’échec de la requête, notamment lors de l’accès à des données restreintes ou sensibles. S'assurer que ces en-têtes sont fournis et correctement formés dans la requête peut aider à éviter l'erreur 428 et d'autres difficultés.
Questions courantes sur les erreurs HTTP 428 en Python
- Que signifie le code d'état 428 ?
- Le code d'état 428 indique que le serveur requiert des critères spécifiques, tels que la validation des en-têtes ou du jeton, avant de traiter la requête.
- Comment corriger l’erreur 428 en Python ?
- Utilisez des en-têtes comme If-Match ou If-Unmodified-Since, et assurez-vous que la session est correctement préservée avec requests.Session().
- Pourquoi ma requête POST renvoie-t-elle une erreur 428 ?
- Avant de traiter la requête POST, le serveur est susceptible de vérifier une condition, telle qu'un en-tête ou un jeton préexistant.
- Quel est le rôle du If-Match en-tête ?
- Le If-Match L'en-tête garantit que la demande est traitée uniquement si la ressource correspond à la valeur ETag spécifiée.
- Comment puis-je garantir une bonne gestion des sessions dans les requêtes Python ?
- En utilisant requests.Session() maintient votre session, y compris les en-têtes et les cookies, cohérente dans les demandes ultérieures.
Réflexions finales sur la correction du code d'état 428
Le code d'état 428 est souvent utilisé pour indiquer des conditions préalables manquantes, telles que des en-têtes essentiels. Pour résoudre ce problème, assurez-vous que la demande inclut les bons en-têtes, tels que Si-correspond ou Si-non modifié-depuis. La gestion des sessions est également importante.
De plus, en gérant de manière appropriée l'authentification et d'autres en-têtes liés à la sécurité, vous pouvez vous assurer que la requête POST est traitée sans problème. En répondant à ces critères, le serveur doit renvoyer le code d'état 200 requis, indiquant que la demande a réussi.
Sources et références pour les solutions de code d'état HTTP 428
- Des informations sur les codes d'état HTTP et le dépannage des erreurs de conditions préalables ont été obtenues auprès de Réseau de développeurs Mozilla .
- La documentation officielle des requêtes Python a fourni des informations détaillées sur la gestion des sessions et des en-têtes dans les requêtes HTTP. Visite Bibliothèque de requêtes Python .
- Pour comprendre la gestion des sessions et la gestion des jetons API, les ressources de Du vrai Python ont été référencés.
- Des exemples supplémentaires et des étapes de dépannage pour la gestion des erreurs HTTP sont disponibles sur Débordement de pile .