Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在CGI脚本中访问请求的HTTP头?_Perl_Http Headers_Cgi - Fatal编程技术网

Perl 如何在CGI脚本中访问请求的HTTP头?

Perl 如何在CGI脚本中访问请求的HTTP头?,perl,http-headers,cgi,Perl,Http Headers,Cgi,我在小型应用程序和测试代码中使用了一些Perl,但我对网络和CGI还不熟悉 我知道了如何生成请求的标题(使用CGI.pm并打印header()函数的结果),但没有找到任何关于如何访问发送到CGI脚本的标题的信息。有人能给我指出正确的方向吗 这可能来自以下请求: curlhttp://127.0.0.1:80/cgi-bin/headers.cgi-H“HeaderAttribute:value”它们作为环境变量提供,例如 HTTP_HEADERATTRIBUTE=value 不过,您可能需要做

我在小型应用程序和测试代码中使用了一些Perl,但我对网络和CGI还不熟悉

我知道了如何生成请求的标题(使用CGI.pm并打印header()函数的结果),但没有找到任何关于如何访问发送到CGI脚本的标题的信息。有人能给我指出正确的方向吗

这可能来自以下请求:


curlhttp://127.0.0.1:80/cgi-bin/headers.cgi-H“HeaderAttribute:value”

它们作为环境变量提供,例如

HTTP_HEADERATTRIBUTE=value

不过,您可能需要做一些事情来配置web服务器以提供这样一个变量。

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
除了
http()
方法之外,还可以从环境变量中获取http头信息

因此,如果您使用的是类似的东西,它没有http方法。您可以执行以下操作:

  my $header = 'HTTP_X_REQUESTED_WITH';

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

很好的简单例子,正是我所希望的。谢谢那么,它回答了你的问题吗?有没有办法逐字打印标题名?i、 e.
x-some-header
而不是
HTTP\u x\u some\u header
?这不会显示任何自定义头或任何内容信息,如附加文件的元数据。