perl - 我在哪里可以找到 HTTP::Server::Simple 中的请求正文

标签 perl http

我有以下简单的服务器:

我正在尝试定位请求正文(或内容)的位置。 我试过转储 $self$cgi 但它们不包含该字段(我假设是因为它们不包含有关请求的任何信息)

如何获取请求正文?

package MyWebServer;
 use strict;
 use HTTP::Server::Simple::CGI;
 use base qw(HTTP::Server::Simple::CGI);
 use Data::Dumper;

 my %dispatch = (
     '/hello' => \&resp_hello,
     # ...
 );

 sub handle_request {
     my $self = shift;
     my $cgi  = shift;

     my $path = $cgi->path_info();
     my $handler = $dispatch{$path};

     print "printing self in request".Dumper($cgi);
     my $req = $cgi->get_request;
     if (ref($handler) eq "CODE") {
         print "HTTP/1.0 200 OK\r\n";
         $handler->($cgi, "asd");

     } else {
         print "HTTP/1.0 404 Not found\r\n";
         print $cgi->header,
               $cgi->start_html('Not found'),
               $cgi->h1('Not found'),
               $cgi->end_html;
     }
 }

 sub resp_hello($$) {
     my ($cgi, $asd)  = @_;   # CGI.pm object

     my $who = $cgi->param('name');

     print $cgi->header,
           $cgi->start_html("Hello"),
           $cgi->h1("Hello world!!"),
           $cgi->h2("Azdh $asd");

           $cgi->end_html;
 }

 # start the server on port 8080
 my $pid = MyWebServer->new(8081)->background();
 print "Use 'kill $pid' to stop server.\n";

编辑:这是一个示例请求:

use strict;
require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => "http://localhost:8081/hello");


$req->content("<foo>3.14</foo>"); # the request body 


my $resp = $ua->request($req);
if ($resp->is_success) {
    my $message = $resp->decoded_content;
    print "Received reply: $message\n";
}
else {
    print "HTTP GET error code: ", $resp->code, "\n";
    print "HTTP GET error message: ", $resp->message, "\n";
}

最佳答案

它有点旧,但面临同样的问题,这是解决方案:

$cgi->param('POSTDATA');

这就是检索正文内容所需的全部内容。

干杯。

关于perl - 我在哪里可以找到 HTTP::Server::Simple 中的请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498034/

相关文章:

Python 服务器 cgi.FieldStorage 解析 multipart/form-data

perl - 为什么我不能说 print $somehash{$var}{fh} "foo"?

linux - 用于捕获在反引号中执行的命令的 stderr 和 stdout 的 Perl 脚本

Perl Image::Resize 模块和 PNG 图像

javascript - 从 http 而不是 https 加载图像时出现 403 错误

java - 有没有办法在Java中 "clean"接受 header ?

http - 使用 PL/SQL HTTP 上传 BLOB 文件

perl - 如何从 macbook 上卸载 perlbrew

perl - 如何在脚本仍在运行时使用 vim 从 Perl 编辑文本?

c++ - 用于后端 C++ 进程的 FastCGI 或 HTTP