2016-03-07 99 views
-1

我在CGI腳本中驗證了以下驗證GET方法並返回405 HTTP狀態代碼(如果未使用GET方法)。不幸的是,當使用POST或者PUT時,它仍然返回200狀態OK。在CGI腳本中使用HTTP狀態代碼的Perl CGI

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' 
); 
} 

,但是當我在客戶端和打印STATUS_CODE使用LWP它仍然給200 OK,當我打印的內容是打印狀態:405

代碼我使用在客戶端:

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; 
} 

從上面的代碼會打印成功

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

以下信息,我如何能匹配ST atus_line與來自CGI標題的值相關嗎?

+4

你爲什麼混合GGI.pm(有利於替代的主營移除)手卷CGI環境解析(不,不,不,不),! – Quentin

回答

0

每本similar SO post,你可以嘗試:

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

,而不是你:

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