2016-03-07 1 views
-1

J'ai la validation suivante dans un script CGI qui va vérifier la méthode GET et retourner un code d'état HTTP 405 si la méthode GET n'est pas utilisée. Malheureusement, il renvoie toujours un état 200 OK lorsque vous utilisez POST ou PUT.Perl CGI avec les codes d'état HTTP dans l'API RESTful

my ($buffer); 
# Read in text 
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; 
if ($ENV{'REQUEST_METHOD'} eq "GET") 
    { 
$buffer = $ENV{'QUERY_STRING'}; 
    } 
else 
{ 
    print $cgi->header(
    -type=>'text/plain', 
    -status=> '405 Method Not Allowed' 
); 
} 

mais quand j'utilise LWP au client et l'impression status_code il donne encore 200 OK et quand j'imprimer le contenu l'impression de l'état: 405 Code

J'utilise au client:

use LWP; 
use HTTP:Request::Common; 

my $ua = LWP::UserAgent->new; 
my $req =PUT("/path/to/request"); 

my $result = $ua->request($req); 

if($result->is_success) { 
    print "HTTP RESPONSE CODE:" , $result->status_line; 
    print $result->decoded_content; 
} 

de code ci-dessus, il imprime les informations suivantes sur le succès

HTTP RESPONSE CODE: 200 OK 
Status: 405 Method Not Allowed 
"some text regarding why method not allowed" 
Requested Method Not allowed 

Comment puis-je correspondre à la st atus_line à la valeur provenant de l'en-tête CGI?

+4

Pourquoi vous mélangez GGI.pm (retiré de base en faveur des alternatives) avec roulées à la main environnement CGI analyse (non, juste non, non, non) ?! – Quentin

Répondre

0

Par cette similar SO post, vous pouvez essayer:

else 
{ 
    $cgi->$header->status('405 Method Not Allowed') 
    print $cgi->header('text/plain'); 
} 

au lieu de votre:

else 
{ 
    print $cgi->header(
     -type=>'text/plain', 
     -status=> '405 Method Not Allowed' 
    ); 
}