为什么Catalyst :: Controller :: WrapCGI没有获得任何发布数据?

时间:2015-08-20 20:58:01

标签: perl http-post catalyst http-request

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

1 个答案:

答案 0 :(得分: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 Code below from here,这对于seek($body,0,0)来说足够聪明,但对于链条下的下一个人来说太过愚蠢和不体贴...... (code 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,这不仅无法为下一个人清理,而且无法为自己设置{{3} },

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.