2011-05-31 143 views
1

我正在使用在ejabberd中發現的請求處理程序來構建REST服務。Ejabberd的REST服務; DELETE和PUT方法

是否可以使用PUT和DELETE HTTP方法調用ejabberd request_handlers?如果是這樣如何?

我已經能夠使用POST和GET HTTP方法成功調用request_handlers,但似乎無法對PUT或DELETE執行相同的操作。

每次我嘗試做一個PUT或DELETE我得到的回報是「400錯誤的請求」

我使用捲曲做的測試

curl -i -X <METHOD> <URL> 

爲GET,PUT和DELETE,和

curl -i -X <METHOD> <URL> -d <POSTBody> 

爲POST(也嘗試了PUT和DELETE)

我已經配置的再在ejabberd.cfg任務處理程序與以下

{listen, 
[ 
    (...) 
    {5280, ejabberd_http, [ 
        http_bind, 
        http_poll, 
        web_admin, 
        {request_handlers, [ 
          {["hello_world"], mod_http_hello_world}, 
          {["users"], mod_http_registered_users}, 
          {["api"],mod_http_rest_api} 
        ]} 
    ]} 

和mod_http_rest_api

-module(mod_http_rest_api). 
-define(EJABBERD_DEBUG, true). 

-behavior(gen_mod). 

-export([start/2,stop/1,process/2]). 

-include("ejabberd.hrl"). 
-include("jlib.hrl"). 
-include("ejabberd_http.hrl"). 

start(_Host, _Opts) -> 
    ?INFO_MSG("mod_http_rest_api: Starting",[]), 
    ok. 

stop(_Host) -> 
    ?INFO_MSG("mod_http_rest_api: Stoping",[]), 
    ok. 

process(List,#request{method = Method}) -> 
    StrMethod = atom_to_list(Method), 
    List ++ " was invoked with method " ++ StrMethod. 

回答

0

目前,我沒有做任何,因爲我現在不能做分辯。但問題似乎是,ejabberd服務器只接受Ejabberd 2.1.0之後的DELETE和PUT http方法,並且我正在使用ejabberd 2.0.5已在EJAB-662中說明

因此,要使DELETE和PUT工作,將需要更新ejabberd到2.1.0或更高版本

看起來可能的另一種方法是使用此ejabberd_http_rest.patch

編輯:我升級我的ejabberd到2.1.6,現在我可以使用DELETE和PUT HTTP方法。

相關問題