给定以下处理程序(直接来自https://metacpan.org/pod/Plack::Handler::Apache2)
package My::ModPerl::Handler;
use Plack::Handler::Apache2;
sub get_app {
# magic!
}
sub handler {
my $r = shift; # Apache2::RequestRec
my $app = get_app(); # CODE
#-- #(1)
Plack::Handler::Apache2->call_app($r, $app);
#-- #(2)
}由于app是一个黑盒,有没有办法以某种方式检索生成的完整响应?我想在标记为#(2)的行中执行此操作,并同时获取标题和正文。理想情况下,我会在#(1)行中做一些神奇的事情,以某种方式强制$r存储响应(然后在#(2)中检索它)。
发布于 2020-05-15 20:07:01
您可以将您的应用程序包装在一个中间件中,使PSGI响应在您的处理程序代码中可用。
package My::ModPerl::Handler;
use Plack::Handler::Apache2;
sub get_app {
# magic!
}
sub handler {
my $r = shift; # Apache2::RequestRec
my $app = get_app(); # CODE
my $res; # this will hold the response
Plack::Handler::Apache2->call_app(
$r,
sub {
my $env = shift;
$res = $app->($env); # closes over outside variable
return $res;
}
);
# $res == [ $status, $headers, $body ]
}这段代码结束在$res上,并分配来自应用程序内部的响应(或者更确切地说,是它周围的额外一层)。然后,您可以在您自己的代码中的Apache处理程序代码之外使用它。
请注意,我还没有运行过这段代码,但我非常确定它应该可以工作。
https://stackoverflow.com/questions/61818249
复制相似问题