Как получить доступ к заголовку HTTP-запроса в CGI-скрипте? - PullRequest
19 голосов
/ 24 октября 2010

Я немного использовал Perl для небольших приложений и тестового кода, но я плохо знаком с сетями и CGI.

Я понимаю, как сделать заголовок запроса (используя CGI.pm и распечатать результаты функции header ()), но не смог найти никакой информации о том, как получить доступ к заголовкам, отправляемым на мой CGI скрипт. Может ли кто-нибудь указать мне правильное направление?

Это может быть из запроса, подобного этому:

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

Ответы [ 3 ]

31 голосов
/ 24 октября 2010

Модуль CGI имеет функцию http(), которую вы можете использовать для этой цели:

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

Попробуйте; выше дает мне:

$ 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
6 голосов
/ 24 октября 2010

В дополнение к методу CGI.pm http() вы можете получить информацию заголовков HTTP из переменных среды.

Так что в случае, если вы используете что-то вроде CGI:: Минимальный , который не имеет метода http.Вы можете сделать что-то вроде:

  my $header = 'HTTP_X_REQUESTED_WITH';

  if (exists $ENV{$header} && lc $ENV{$header} eq 'xmlhttprequest') {
   _do_some_ajaxian_stuff();
  }
1 голос
/ 24 октября 2010

Они поставляются в виде переменных среды, таких как

HTTP_HEADERATTRIBUTE=value

Возможно, вам придется что-то сделать, чтобы настроить веб-сервер для предоставления такой переменной.

...