我有以下简单的服务器:
我正在尝试找到请求正文(或内容)的位置。
我尝试过转储$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";
}
答案 0 :(得分:1)
使用$ req = $ cgi-&gt; get_request行获取的请求对象是CGI :: Request对象。由于这是一个请求对象,因此它只有属性(传递给请求的参数)。请注意,只有响应对象才有内容。因此,要查看已传递的所有参数,可以使用as_string()对象方法,如下所述。
print $req->as_string;
有关访问请求对象的各个参数的更多信息,请参阅http://search.cpan.org/~mrjc/cvswebedit-v2.0b1/cvs-web/lib/CGI/Request.pm中的CGI :: Request文档。
答案 1 :(得分:1)
虽然有点旧,但面对同样的问题,这就是解决方案:
$ CGI-&GT; PARAM( 'POSTDATA');
这就是你需要检索身体内容。
欢呼声。