【问题标题】:How do I access the HTTP Header of request in a CGI script?如何在 CGI 脚本中访问请求的 HTTP 标头?
【发布时间】:2011-04-29 18:02:24
【问题描述】:

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

我知道如何制作请求的标头(使用 CGI.pm 并打印 header() 函数的结果),但无法找到有关如何访问发送到我的标头的任何信息CGI 脚本。有人能指出我正确的方向吗?

这可能来自这样的请求:

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

【问题讨论】:

    标签: perl http-headers cgi


    【解决方案1】:

    除了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();
      }
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 优秀的简单示例,正是我所希望的。谢谢!
      • 那它回答你的问题了吗?
      • 有什么方法可以打印逐字标题名称?即x-some-header 而不是HTTP_X_SOME_HEADER ?
      • 这不会显示任何自定义标题或任何内容信息,例如附加文件的元数据。
      【解决方案3】:

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

      HTTP_HEADERATTRIBUTE=value
      

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

      【讨论】:

        猜你喜欢
        • 2011-03-06
        • 1970-01-01
        • 1970-01-01
        • 2017-03-24
        • 2019-02-20
        • 2015-10-23
        • 2010-09-18
        相关资源
        最近更新 更多