【问题标题】:How can Plack debug a request?Plack 如何调试请求?
【发布时间】:2021-04-05 12:40:23
【问题描述】:

我正在使用 Plack 调试 HTTP 客户端,其中 plack 服务器侦听端口 80 并且客户端发送请求。如何使用 Plack 查看客户端请求?我正在尝试做这样的事情:

my $app = sub {
  my $self = shift;

  [200, ['Content-Type' => 'text/html'], [ $self ]];
};

如何调试请求?

【问题讨论】:

  • 请显示完整的(可运行的)脚本,更多信息请参见minimal reproducible example
  • 在 Windows 上,我发现免费程序 Fiddler 可用于检查实际发送的内容。
  • 这是一个非常有趣的问题。我认为您实际上无法获取 raw HTTP 请求。 Plack 的解析器是基于块的。您可以转储 $env 中的内容或将 Plack::Request 转换为字符串,但我认为您必须连接到请求解析器才能获得转储。或者你可以连接到你的服务器。

标签: perl plack


【解决方案1】:

PSGI/Plack 是围绕 HTTP 的抽象。它的目标是不必担心实现细节(就像没有它一样)。在您的应用看到请求时,它已经被解析为 $env 并且在 Plack 的表示中。

您可以在 Plack::HTTPParser::PP 中进行猴子修补,以将 $chunks 转储出来以查看会发生什么。您必须在您的环境中设置 PLACK_HTTP_PARSER_PP=1 以确保它加载纯 Perl 版本。

然而,这似乎真的很乏味。如果您使用的是 Linux,则可以使用 netcat (nc)。监听您的端口,并与您正在测试的客户端一起发送请求。

$ nc -l 3000
GET / HTTP/1.1
Host: localhost:3000
User-Agent: curl/7.68.0
Accept: */*

在另一个终端上...

$ curl localhost:3000

如果您不关心确切的表示,而只关心解析后是否包含正确的内容,请先在您的 Plack 应用中转储 $env

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 2011-08-02
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多