2010-10-24 3 views
14

Ich habe Perl ein wenig für kleine Anwendungen und Testcode verwendet, aber ich bin neu in Netzwerken und CGI.Wie greife ich auf den HTTP-Header der Anfrage in einem CGI-Skript zu?

Ich bekomme, wie man die Kopfzeile einer Anfrage (mit CGI.pm und Drucken der Ergebnisse der Funktion header()), aber nicht in der Lage, Informationen darüber, wie Sie auf die Header gesendet werden, zu finden mein CGI-Skript. Könnte mir jemand in die richtige Richtung zeigen?

Dieses wird von einem Anfrage wie folgt sein könnte:

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

Antwort

1

Sie sind als Umgebungsvariablen geliefert, wie

HTTP_HEADERATTRIBUTE=value 

Sie müssen etwas tun können Ihren Web-Server konfigurieren um eine solche Variable zu liefern.

26

Das CGI-Modul verfügt über eine http() Funktion Sie zu diesem Zweck verwenden können:

#!/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"; 
} 

es ausprobieren; die oben gibt mir:

$ 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

Ausgezeichnetes einfaches Beispiel, genau das, was ich mir erhofft hatte. Vielen Dank! – CGInewb

+0

Beantwortet es deine Frage? – mfontani

+2

Gibt es eine Möglichkeit, die Namen der wortwörtlichen Header zu drucken? d.h. 'x-einige-header' anstelle von' HTTP_X_SOME_HEADER'? –

5

Neben dem CGI.pmhttp() Methode Sie HTTP-Header Informationen aus den Umgebungsvariablen erhalten.

Also für den Fall, dass Sie etwas wie CGI::Minimal verwenden, die nicht die HTTP-Methode hat. Sie können etwas tun wie:

my $header = 'HTTP_X_REQUESTED_WITH'; 

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