我正在使用Catalyst构建RESTful Web服务,因此我以通常的方式创建了一个Catalyst控制器
script/myapp_create.pl controller MyApp::Controller
然后我启动催化剂测试服务器
script/zoo_server.pl -rd
到目前为止一切顺利 - 我现在可以转到http://localhost:3000/user
并看到消息“在用户中匹配MyApp :: Controller :: User。”
然后用以下行替换lib / MyApp / Controller / User.pm中的第一个BEGIN行
BEGIN { extends 'Catalyst::Controller::REST' }
在做任何其他事情之前,我想检查一下我执行POST请求并观察响应的能力。所以在另一个终端窗口中,我输入
curl http://localhost:3000/user --verbose --data "<test><m>whatever</m></test>" -H "Content-Type: text/xml"
此时,由于我没有实现任何POST方法,我希望看到“405 Method Not Allowed”响应。相反,我从卷曲中看到的是:
* About to connect() to localhost port 3000 (#0)
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 3000 (#0)
> POST /user HTTP/1.1
> User-Agent: curl/7.19.6 (i386-apple-darwin10.0.0) libcurl/7.19.6 zlib/1.2.5
> Host: localhost:3000
> Accept: */*
> Content-Type: text/xml
> Content-Length: 28
>
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
* Closing connection #0
然后这似乎崩溃催化剂的测试服务器。服务器不记录任何内容,但将来尝试联系服务器,例如对“localhost:3000 / user”执行另一个GET请求,导致卷曲“无法连接到主机”错误。
我注意到只有在使用Catalyst :: Controller :: REST时才会发生这种情况。如果我只是制作一个普通的控制器,POST它就不会崩溃。所以我假设它发生在反序列化操作上,它将被委托给XML :: Simple(根据Catalyst :: Controller :: REST的默认值)。有什么想法吗?
顺便说一下,我最终想要做的是创建一个类似sub thing :Local :ActionClass('REST') ...
的方法,以及相应的sub thing_POST
。我的理解是,在调用$c->request->data
之前,对包含XML的/ user / thing的POST请求应该自动反序列化并放入thing_POST
。上述测试是初步的 - 旨在检查如果定义了 no POST方法会发生什么。 (对于它的价值,如果我创建sub thing
和sub thing_POST
,我会得到完全相同的行为,然后使用curl向/ user / thing发出POST请求。)
答案 0 :(得分:2)
我最终将其追溯到XML :: SAX。可重现的错误情况:
% cat >! test
<test><a>blah</a></test>
% perl -e 'use XML::SAX;my $sp = XML::SAX::ParserFactory->parser;my $tree = $sp->parse_uri("test")'
Segmentation fault
请注意,如果引用XML,它可以正常工作,而不是在文件中:
% perl -e 'use XML::SAX;my $sp = XML::SAX::ParserFactory->parser;my $tree = $sp->parse_string("<a><b>test</b></a>");print $tree'
HASH(0x1009c4470)
我猜想我的XML :: SAX安装有问题。
答案 1 :(得分:0)
您已经使用以下内容定义了您的操作 thing :附加了本地属性,这意味着调度的路径是/ user / thing(而不是那个,您将数据发布到/ user) )。您可能想查看Catalyst Manual - Action Types introduction
或者,如果您仍然遇到一些问题,可以尝试在官方的#catalyst irc频道询问。