Maison >développement back-end >tutoriel php >Comment gérer les erreurs HTTP et récupérer les codes de réponse avec `file_get_contents` et `stream_context_create` ?

Comment gérer les erreurs HTTP et récupérer les codes de réponse avec `file_get_contents` et `stream_context_create` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 08:17:10773parcourir

How to Handle HTTP Errors and Retrieve Response Codes with `file_get_contents` and `stream_context_create`?

Code de réponse HTTP avec file_get_contents et stream_context_create

Afin d'effectuer des requêtes POST, vous pouvez utiliser file_get_contents en conjonction avec stream_context_create. Cependant, vous pouvez rencontrer des avertissements lorsque vous rencontrez des erreurs HTTP. Cet article aborde ce problème et propose des solutions pour supprimer les avertissements et obtenir les codes de réponse du flux.

Pour commencer, considérons le scénario suivant :

$options = ['http' => [
    'method' => 'POST',
    'content' => $data,
    'header' => 
        "Content-Type: text/plain\r\n" .
        "Content-Length: " . strlen($data) . "\r\n",
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

Ce code gère les requêtes POST, mais en cas d'erreur HTTP, un avertissement s'affiche :

file_get_contents(...): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

De plus, il renvoie false. Deux problèmes découlent de ce problème :

  1. Puis-je empêcher l'apparition de l'avertissement ?
  2. Est-il possible de récupérer les détails de l'erreur, notamment les codes de réponse, à partir du flux ?

Suppression de l'avertissement

Pour supprimer l'avertissement, nous pouvons utiliser l'ignore_errors option dans stream_context_create() :

$context = stream_context_create(['http' => ['ignore_errors' => true]]);

Avec cette modification, l'avertissement ne sera plus affiché.

Obtention des codes de réponse

Pour obtenir le code de réponse du flux, vous pouvez inspecter la variable http_response_header :

$context = stream_context_create(['http' => ['ignore_errors' => true]]);
$result = file_get_contents("http://example.com", false, $context);
var_dump($http_response_header);

Ce code affichera un tableau contenant les en-têtes de réponse, y compris le code de réponse.

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!

Déclaration:
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