web-dev-qa-db-ja.com

CGIスクリプトでリクエストのHTTPヘッダーにアクセスするにはどうすればよいですか?

私は小さなアプリケーションとテストコードにPerlを少し使用しましたが、ネットワーキングとCGIは初めてです。

リクエストのヘッダーを作成する方法(CGI.pmを使用してheader()関数の結果を出力する)を取得しましたが、CGIスクリプトに送信されているヘッダーにアクセスする方法に関する情報を見つけることができませんでした。誰かが私を正しい方向に向けることができますか?

これは、次のようなリクエストからのものである可能性があります。

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

20
CGInewb

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
31
mfontani

CGI.pmhttp()メソッドに加えて、環境変数からHTTPヘッダー情報を取得できます。

したがって、 CGI :: Minimal のようなものを使用している場合、これにはhttpメソッドがありません。あなたは次のようなことをすることができます:

  my $header = 'HTTP_X_REQUESTED_WITH';

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

これらは、次のような環境変数として提供されます。

HTTP_HEADERATTRIBUTE=value

ただし、そのような変数を提供するようにWebサーバーを構成するために何かをしなければならない場合があります。

1
Greg Hewgill