【问题标题】:How come Catalyst::Controller::WrapCGI doesn't get any post data?为什么 Catalyst::Controller::WrapCGI 没有得到任何发布数据?
【发布时间】:2015-08-20 20:58:01
【问题描述】:

每当我POST 到带有Catalyst::Controller::WrapCGI 的页面时,我注意到我的旧CGI 脚本没有得到任何POST 数据。HTTP 请求正文中的数据。我做错了什么,我该如何解决?

【问题讨论】:

    标签: perl http-post catalyst http-request


    【解决方案1】:

    就我而言,这是因为我使用的是Catalyst::Controller::WrapCGI v0.35 和Catalyst::Controller::REST。这造成了一个问题.. 我的配置看起来像这样,

    package MyApp::Controller::REST;
    __PACKAGE__->config(namespace => '');
    BEGIN { extends 'Catalyst::Controller::REST' }
    

    package MyApp::Controller::Root;
    __PACKAGE__->config(namespace => '');
    BEGIN { extends 'Catalyst::Controller::WrapCGI' }
    

    但是,Catalyst::Controller::REST 安装了 begin action on line 298

    sub begin : ActionClass('Deserialize') { }
    

    而且,在我的情况下,那是委托给Catalyst::Action::Deserialize::JSON,这对seek($body,0,0) 来说足够聪明,但是对于链下的下一个人来说太愚蠢和不考虑这样做......Code below from here

    if(openhandle $body) {
        seek($body, 0, 0); # in case something has already read from it
        while ( defined( my $line = <$body> ) ) {
            $rbody .= $line;
        }
    }
    

    而且,更糟糕的是,这个例子中的下一个人是Catalyst::Controller::WrapCGI,它不仅没有为下一个人清理,而且没有为自己设置(code from here)

    if ($body) { # Slurp from body filehandle
      local $/; $body_content = <$body>;
    }
    

    这应该看起来像(至少)

    if ($body) { # Slurp from body filehandle
      local $/;
      seek($body,0,0);
      $body_content = <$body>;
    }
    

    这就是为什么我们不能拥有美好的东西...I opened a bug in C:C:WrapCGI to get this resolved.

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2013-01-24
      • 2023-04-02
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多