나는 RESTful 웹 서비스를 구축하는 촉매를 사용하고, 그래서 일반적인 방법으로 촉매 컨트롤러를 만들왜 curl POST 요청이 Catalyst :: Controller :: REST 컨트롤러와 충돌합니까?
script/myapp_create.pl controller MyApp::Controller
그때 나는 지금까지 이렇게 좋은 촉매 테스트 서버
script/zoo_server.pl -rd
를 불 - 이제 http://localhost:3000/user
으로 가서 "일치하는 MyApp :: Controller :: User in User"메시지를 볼 수 있습니다.
BEGIN { extends 'Catalyst::Controller::REST' }
와 lib 디렉토리/MyApp를/컨트롤러/User.pm의 첫 번째 BEGIN 라인을 대체
, 나는 POST 요청 및 시계를 실행하기 위해 내 능력을 확인하려면 응답. 다른 터미널 창에서 그래서, 나는 내가 어떤 POST 메소드를 구현하지 않은 이후, 나는 응답에 "허용되지 않음 (405) 방법"을 참조하십시오 기대하고,이 시점에서
curl http://localhost:3000/user --verbose --data "<test><m>whatever</m></test>" -H "Content-Type: text/xml"
을 입력합니다. 그 대신에 내가 뒤에서 볼 수있는 것은 다음과 같습니다.
* 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 요청을하면 curl에서 "호스트에 연결할 수 없습니다"오류가 발생합니다.
내가 Catalyst :: Controller :: REST를 사용하는 경우에만 발생합니다. 방금 컨트롤러를 만들면 POST를 통해 아무 것도 충돌하지 않습니다. 그래서 deserialization 액션에서 XML : :: Simple (Catalyst :: Controller :: REST의 기본값에 따라)이 위임 될 것이라고 가정합니다. 어떤 아이디어?
결국 내가하고 싶은 것은 sub thing :Local :ActionClass('REST') ...
과 같은 방법을 만들고 이에 해당하는 sub thing_POST
을 작성하는 것입니다. 내 이해는 XML을 포함하는/user/thing에 대한 POST 요청을 thing_POST
을 호출하기 전에 자동으로 deserialize하여 $c->request->data
에 넣어야한다는 것입니다. 위의 테스트는 이것에 대한 예비 테스트입니다. 이 아니고 POST 메소드가 정의 된 경우 어떻게되는지 확인하도록 설계되었습니다. (그것은 가치가 무엇을 위해, 나는/사용자/일에 POST 요청을 발행 컬 사용 후 내가 sub thing
및 sub thing_POST
만들 경우 정확히 같은 동작을 얻을합니다.)
감사합니다. 특히 IRC 팁입니다. 사실, 지금 내가 질문을 편집하여 명확히 했으므로/user/thing에 게시하면 동일한 동작을 얻습니다. 내가보고있는 것은 Catalyst (Controller) :: Controller :: REST 객체에 정의 된 모든 동작을 중단시키는 (컬 생성 된) POST 요청의 일반적인 경향 인 것으로 보입니다./user에 게시하면 여전히이 효과가 발생하지만 (기본 'index' 액션으로 인해), 정의되지 않은 컨트롤러 (예 :'/ user/feck/off')에 게시하면 않습니다 (대신 "찾을 수 없음"오류가 발생합니다). 그리고 REST 컨트롤러 만 작동합니다. 그래서 나는 내 설정에서 무언가가 망가 졌다고 생각하고 있습니다. – user751842
좋아요, 나는 irc.perl.org에서 #catalyst를 시도해 봤습니다. 지금까지 멍청한 멍청이에게 ... 아무도 거기에없는 것 같습니다. 플러스 측면에서 필자가 보여준 코드는 제 다른 컴퓨터에서 잘 작동합니다. 이는 설치/구성 오류 일 수 있음을 암시합니다. – user751842
#catalyst가 구조되었습니다 ... 실제로는 도움이되었습니다 – user751842