66 votes

Est-il possible de consigner tous les en-têtes de requête HTTP avec Apache ?

Comment enregistrer dans le fichier journal le contenu de l'en-tête de requête HTTP (tous) tel que reçu par Apache ?

Actuellement, ma configuration de format de journal combiné Apache est :

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined

Je comprends qu'il est possible de le faire ainsi :

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined

mais ce n'est pas logique et il n'est pas possible de savoir quels seront les en-têtes.

103voto

CrazyPyro Points 176

mod_log_forensic est ce que vous voulez, mais il peut ne pas être inclus/disponible avec votre installation Apache par défaut.

Voici comment l'utiliser.

 LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so 
<IfModule log_forensic_module> 
ForensicLog /var/log/httpd/forensic_log 
</IfModule> 

1voto

Kursk Points 11

Dans mon cas, le moyen le plus simple d'obtenir les en-têtes du navigateur était d'utiliser php. Il ajoute des en-têtes au fichier et les imprime sur la page de test.

 <?php
$fp = fopen('m:/temp/requests.txt', 'a');
$time = $_SERVER['REQUEST_TIME'];
fwrite($fp, $time + "\n");
echo "$time.<br>";
foreach (getallheaders() as $name => $value) {
    $cur_hd = "$name: $value\n";
    fwrite($fp, $cur_hd);
    echo "$cur_hd.<br>";
}
fwrite($fp, "***\n");
fclose($fp);
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X