2011-05-31 110 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方法。

相关问题