2010-10-24 20 views
14

Küçük uygulamalar ve test kodları için Perl'i biraz kullandım, ancak ağ iletişimi ve CGI için yeniyim.Bir CGI komut dosyasındaki HTTP Header isteklerine nasıl erişirim?

Bir isteğin üstbilgisini nasıl yapacağım (CGI.pm kullanarak ve header() işlevinin sonuçlarını nasıl yazdıracağım), ancak gönderilmekte olan başlıklara nasıl erişileceğiyle ilgili herhangi bir bilgi bulamadık. CGI kodum. Birisi bana doğru yönde işaret edebilir mi? Kendi web sunucusunu yapılandırmak için bir şey yapmak gerekebilir böyle

HTTP_HEADERATTRIBUTE=value 

olarak,

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

cevap

1

Onlar ortam değişkenleri olarak temin ediyoruz:

Bu böyle bir istekten olabilir Gerçi böyle bir değişken tedarik etmek.

26

CGI modülü bu amaçla kullanabileceğiniz bir http() işlevi vardır:

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

Deneyin; Yukarıda bana verir: HTTP başlıklarını ortam değişkenleri bilgi alabilirsiniz CGI.pmhttp() yöntemine ek olarak

$ 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

Mükemmel bir örnek, tam olarak ne için umuyordum. Teşekkürler! – CGInewb

+0

Sorunuza cevap veriyor mu o zaman? – mfontani

+2

Tüm hakem başlıklarını basmanın herhangi bir yolu var mı? HTTP_X_SOME_HEADER yerine x-some-header'? –

5

.

Yani, http yöntemine sahip olmayan CGI::Minimal gibi bir şey kullanıyorsanız.

my $header = 'HTTP_X_REQUESTED_WITH'; 

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