Comment analyser les en-têtes de réponse en PHP?
J'ai fait un protocole signé la demande d'une API REST et ont les en-têtes de réponse dans un tableau comme suit:
[0] => HTTP/1.1 200 OK
[1] => Cache-Control: private
[2] => Transfer-Encoding: chunked
[3] => Content-Type: text/html; charset=utf-8
[4] => Content-Location: https://***
[5] => Server: Microsoft-IIS/7.0
[6] => Set-Cookie: ASP.NET_SessionId=***; path=/; HttpOnly
[7] => X-AspNetMvc-Version: 2.0
[8] => oauth_token: ***
[9] => oauth_token_secret: ***
[10] => X-AspNet-Version: 4.0.30319
[11] => X-Powered-By: ASP.NET
[12] => Date: Sat, 15 Sep 2012 02:01:15 GMT
Je suis à essayer de comprendre comment analyser les en-têtes pour une récupération facile des éléments tels que le code de statut HTTP, Content-location, oauth_token, et oauth_token_secret?
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin pour itérer le tableau et vérifier
stripos()
pour trouver l'en-tête, vous êtes à la recherche pour. Dans la plupart des cas, vousexplode()
sur:
(limitation à 2 résultante des pièces), mais le code de réponse HTTP exigera de vous exploser à la des espaces.explode()
limite. Je vais modifier ces plus tard, quand j'ai le temps (aussi la définition de la fonction n'a pas assez d'arguments). Vous êtes toujours libre de suggérer des modifications ou de poster une nouvelle réponse.Il semble que le seul en-tête sans
:
est la version du protocole HTTP et de l'état.Faire un
array_shift
extraire, itérer sur les autres, créant un tableau comme ceci:ps: pas testé.
— edit —
profiter 😉
/
):if (! preg_match('/^([^:]):(.*)$/', $header, $output)) continue;
Réponse courte si vous avez pecl_http: http://php.net/manual/it/function.explode.php
Légèrement plus longue réponse:
meilleure façon sans http_parse_headers();
J'ai fini avec cette solution qui utilise les regex pour trouver toutes les clés et valeurs dans l'en-tête est combiné avec certains de la matrice de mutation à partir de https://stackoverflow.com/a/43004994/271351 pour obtenir l'expression régulière correspond à un tableau associatif. Ce n'est pas 100% appropriée pour le problème posé ici depuis qu'il prend dans une chaîne, mais rejoindre un tableau de chaînes de caractères pour obtenir une seule chaîne de travailler comme un précurseur de ce. Mon cas eu à traiter avec des en-têtes, donc cette solution.
Cela donne un tableau associatif contenant les en-têtes. Si la première ligne de l'en-tête est inclus en tant qu'entrée (par exemple,
GET /HTTP/1.1
), cela va l'ignorer pour la sortie.