J'ai besoin d'un code PHP qui effectue un vidage de toutes les informations dans une demande HTTP, y compris les en-têtes et le contenu de toute information incluse dans une demande POST. Fondamentalement, un outil de diagnostic qui crache exactement ce que j'envoie à un serveur.
Quelqu'un at-il un code qui fait cela?
Un moyen simple serait:
<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>
Un peu de massage serait nécessaire pour obtenir tout dans l'ordre souhaité et pour exclure les variables qui ne vous intéressent pas, mais cela devrait vous donner un début.
Personne n'a mentionné comment vider correctement les en-têtes HTTP en toutes circonstances.
D'après la spécification CGI rfc3875, section 4.1.18:
Les méta-variables dont le nom commence par "HTTP_" contiennent des valeurs lues dans les champs d'en-tête de demande client, si le protocole utilisé est HTTP. Le nom du champ d'en-tête HTTP est converti en majuscules, a toutes les occurrences de "-" remplacé par "" et a "HTTP " ajouté pour donner la méta -Nom de variable.
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$chunks = explode('_', $key);
$header = '';
for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
$header .= ucfirst(strtolower($chunks[$i])).'-';
}
$header .= ucfirst(strtolower($chunks[$i])).': '.$value;
echo $header.'<br>';
}
}
Détails: http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html
En rassemblant les réponses de Peter Bailey et Cmyker vous obtenez quelque chose comme:
<?php
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$chunks = explode('_', $key);
$header = '';
for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
$header .= ucfirst(strtolower($chunks[$i])).'-';
}
$header .= ucfirst(strtolower($chunks[$i])).': '.$value;
echo $header."\n";
}
}
$body = file_get_contents('php://input');
if ($body != '') {
print("\n$body\n\n");
}
?>
qui fonctionne avec le php -S
serveur Web intégré, qui est une fonctionnalité très pratique de PHP.
Si vous voulez des en-têtes HTTP réels (à la fois la demande et la réponse), essayez hurl.it .
Vous pouvez utiliser la commande PHP Apache_request_headers()
pour obtenir les en-têtes de demande et Apache_response_headers()
pour obtenir les en-têtes de réponse actuels. Notez que la réponse peut être modifiée ultérieurement dans le script PHP tant que le contenu n'a pas été servi.
file_get_contents ('php: // input') ne fonctionnera pas toujours.
J'ai une demande avec dans les en-têtes "content-length = 735" et "php: // input" est une chaîne vide. Cela dépend donc de la qualité/validité de la requête HTTP.
Le problème était, dans l'URL que j'ai écrit http: // mon_domaine au lieu de https: // mon_domaine
en outre, vous pouvez utiliser get_headers () . cela ne dépend pas d'Apache ..
print_r(get_headers());