2010-10-24 21 views
14

Użyłem Perla trochę dla małych aplikacji i kodu testowego, ale jestem nowy w sieci i CGI.Jak uzyskać dostęp do nagłówka HTTP żądania w skrypcie CGI?

W jaki sposób utworzyć nagłówek żądania (przy użyciu CGI.pm i drukowanie wyników funkcji header()), ale nie udało się znaleźć żadnych informacji na temat dostępu do nagłówków wysyłanych do mój skrypt CGI. Czy ktoś może wskazać mi właściwy kierunek?

To może być z żądania takich jak to:

curl http://127.0.0.1:80/cgi-bin/headers.cgi -H "HeaderAttribute: value"

Odpowiedz

1

Są one dostarczane w zmiennych środowiskowych, takich jak

HTTP_HEADERATTRIBUTE=value 

Być może trzeba coś zrobić, aby skonfigurować serwer WWW do dostarczenia takiej zmiennej.

26

Moduł CGI ma http() funkcji można użyć do tego celu:

#!/usr/bin/perl -- 
use strict; 
use warnings; 
use CGI; 

my $q = CGI->new; 
my %headers = map { $_ => $q->http($_) } $q->http(); 

print $q->header('text/plain'); 
print "Got the following headers:\n"; 
for my $header (keys %headers) { 
    print "$header: $headers{$header}\n"; 
} 

Wypróbuj; powyższe daje mi:

$ curl http://localhost/test.cgi -H "HeaderAttribute: value" 
Got the following headers: 
HTTP_HEADERATTRIBUTE: value 
HTTP_ACCEPT: */* 
HTTP_HOST: localhost 
HTTP_USER_AGENT: curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18 
+0

Doskonały prosty przykład, dokładnie to, na co liczyłem. Dzięki! – CGInewb

+0

Czy odpowiada na twoje pytanie? – mfontani

+2

Jakikolwiek sposób wydrukowania dosłownych nazw nagłówków? to jest 'x-some-header' zamiast' HTTP_X_SOME_HEADER'? –

5

Ponadto metody CGI.pmhttp() można uzyskać nagłówki HTTP informacje ze zmiennych środowiskowych.

W przypadku, gdy używasz czegoś takiego jak CGI::Minimal, który nie ma metody http. możesz zrobić coś takiego:

my $header = 'HTTP_X_REQUESTED_WITH'; 

    if (exists $ENV{$header} && lc $ENV{$header} eq 'xmlhttprequest') { 
    _do_some_ajaxian_stuff(); 
    } 
Powiązane problemy