[PERL] CGI retourner un code erreur

CGI retourner un code erreur [PERL] - Perl - Programmation

Marsh Posté le 20-10-2015 à 10:38:13    

Bonjour,
 
J'ai un perl (CGI) qui permet de contrôler une liste d'URLs (urls.txt).
Si une de ces URLs ne renvoie pas un code 200 alors je veux que ma page se termine avec le code erreur http de la page testée.
 
Voici mon perl :
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use LWP::UserAgent;
  5. print "Content-type: text/html\n\n";
  6. my $browser = create_lwp_browser();
  7. my ($working, $broken, $odd) = get_status_codes($browser);
  8. sub get_status_codes
  9. {
  10.         my $browser = shift;
  11.         my $file='urls.txt';
  12.         open (INFO,$file);
  13.         my @lines = <INFO>;
  14.         close(INFO);
  15.         foreach my $p (@lines)
  16.         {
  17.                 chomp($p);
  18.                 my $response = $browser->get($p);
  19.                 if ($response->code ne "200" )
  20.                 {
  21. #                       print ($p." | ".$response->status_line."<br>" );
  22.                         print "Status: ".$response->status_line."<br>";
  23.                         print "Content-type: text/html<br><br>";
  24.                         exit;
  25.                 }
  26.         }
  27. }
  28. sub create_lwp_browser
  29. {
  30.         my $browser = LWP::UserAgent->new;
  31.         $browser->env_proxy;
  32.         $browser->timeout(30);
  33.         $browser->agent('checkurl.pl/1.0');
  34.         return $browser;
  35. }


 
Malgré tout mes essaies, je ne parviens pas à sortir avec le code erreur de la page testée et j'ai toujours un code 200 dans mes logs apache.
 
Quelqu'un peu'il m'aider à trouver la solution ?
 
Par avance merci.
 
 :hello:  

Reply

Marsh Posté le 20-10-2015 à 10:38:13   

Reply

Marsh Posté le 20-10-2015 à 14:54:45    

Heu, ta ligne 7 contient :

Code :
  1. print "Content-type: text/html\n\n";


Donc tout ce que tu imprimes sur stdout par la suite sera interprété comme du HTML (avec un status 200 rajouté par apache automatiquement).
 
Qui plus est, aux lignes 25 à 27, les fins de lignes de l'entête HTTP, c'est "\n", pas "<br>".
 
Edit: ha, ha, je parie que t'avais "\n" avant, mais tu as converti ça en <br> parce que ça s'imprimait sur une ligne dans le navigateur.


Message édité par tpierron le 20-10-2015 à 14:57:16
Reply

Marsh Posté le 20-10-2015 à 15:38:41    

Bonjour Tpierron,
 
Tu as tout compris pour les <br> c'est corrigé. :jap:  
 
Par contre j'ai supprimé la ligne

Code :
  1. print "Content-type: text/html\n\n";

 mais plus rien ne s'affiche et j'ai toujours un code 200 :(
 
:hello:
 
EDIT: Je retire ce que j'ai dis, ça fonctionne :)
 
Merci beaucoup pour l'aide :jap:


Message édité par web_olivier le 20-10-2015 à 15:57:47
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed