2008-10-03 9 views
16

Je me demandais s'il y avait un moyen d'obtenir les données de requêtes HTTP brutes dans PHP qui s'exécutent sur Apache et qui n'impliquent pas l'utilisation d'extensions supplémentaires. J'ai vu les fonctions HTTP dans le manuel, mais je n'ai pas l'option d'installer une extension dans mon environnement.Comment puis-je accéder aux données de requêtes HTTP brutes avec PHP/Apache?

Alors que je peux accéder aux informations de $ _SERVER, je voudrais voir la demande brute exactement comme elle a été envoyée au serveur. PHP utilise les noms d'en-tête pour convenir à son propre style de clé de tableau, par exemple. Un en-tête de test devient HTTP_X_SOME_TEST_HEADER. Ce n'est pas ce dont j'ai besoin.

Répondre

10

Voulez-vous dire l'information contenue dans $_SERVER?

print_r($_SERVER); 

Edit:

Est-ce que cela alors?

foreach(getallheaders() as $key=>$value) { 
    print $key.': '.$value."<br />"; 
} 
+5

Oui, mais je veux la demande brute avant qu'elle ne soit analysée en _SERVER $ par PHP – Shabbyrobe

+0

Note: getallheaders() fonctionne avec fastcgi depuis PHP 5.4 – NickSoft

12

Utilisez l'emballage php suivant:

$raw_post = file_get_contents("php://input"); 
+7

Je ne pense pas que cela obtienne les en-têtes http bien. – MattSmith

+1

yep seulement le corps :) –

2

Essayez ceci:

$request = $_SERVER['SERVER_PROTOCOL'] .' '. $_SERVER['REQUEST_METHOD'] .' '. $_SERVER['REQUEST_URI'] . PHP_EOL; 

    foreach (getallheaders() as $key => $value) { 
    $request .= trim($key) .': '. trim($value) . PHP_EOL; 
    } 

    $request .= PHP_EOL . file_get_contents('php://input'); 

    echo $request; 
Questions connexes