我正在使用ejabberd中的请求处理程序来构建REST服务。
是否可以使用PUT和DELETE HTTP方法调用ejabberd request_handlers?如果是这样的话?
我已经能够成功调用带有POST和GET HTTP方法的request_handlers,但似乎无法对PUT或DELETE执行相同的操作。
每当我尝试进行PUT或DELETE时,我都会收到“400 Bad Request”
我正在使用curl进行测试
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 :(得分: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方法了。