我想了解ejabberd和erlang ...
我不想做的第一件事是实现我自己的REST调用集,以控制来自另一台服务器的ejabberd。
例如此请求:
POST /custom/register HTTP/1.1
Host: some.server.com:8088
Cache-Control: no-cache
{"username":"user","host":"test.com","password":"pass1"}
我想注册新的Jabber用户,所以我创建了这个ejabberd模块:
-module(mod_test).
-author('').
-vsn('0.1').
-behavior(gen_mod).
-export([start/2, stop/1,process/2]).
%%
%% Includes
%%
%% base ejabberd headers
-include("ejabberd.hrl").
%% ejabberd compatibility functions
-include("jlib.hrl").
%% ejabberd HTTP headers
-include("web/ejabberd_http.hrl").
start(_Host, _Opts) ->
ok.
stop(_Host) ->
ok.
process(["register"], _Request) ->
Data = _Request#request.data,
{200,[],Data}.
并在ejabberd.cfg中添加了HTTP侦听器,我已经能够获取包含发帖数据的响应,但是,我无法理解如何从数据中提取值。
例如,我希望变量Username将在POST数据中获取“ username”键(“ user”)的值。
提前致谢,
马丹
最佳答案
Ejabberd使用Jiffy这是一个Erlang JSON解析器。因此,您可以使用它来解析处理程序中的HTTP请求POST有效负载。
请求
$ curl \
-XPOST http://localhost:5280/test/register \
--data '{"username":"user","host":"test.com","password":"pass1"}'
处理程序
process([<<"register">>], #request{method = 'POST', data = Data}) ->
{JSON} = jiffy:decode(Data),
User = proplists:get_value(<<"username">>, JSON),
Host = proplists:get_value(<<"host">>, JSON),
Pass = proplists:get_value(<<"password">>, JSON),
%% do something with:
%% User =:= <<"user">>
%% Host =:= <<"test.com">>
%% Pass =:= <<"pass1">>
%% ...
{200, [], <<"response">>};
process(_Call, _Req) ->
{404, [], <<"not_found">>}.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文地址:https://stackoverflow.com/questions/23759896/
-
erlang - Erlang maps:remove2和maps:without2之间的实际区别 - 程序控制台
-
erlang - 在Erlang应用程序中加载依赖项的代码路径的正确方法是什么。 - 程序控制台
-
erlang - 如何将 Makefile 输出中的两个不同源目录创建到一个 bin 目录? - 程序控制台
-
erlang - 处理 gen_server 状态的清理 - 程序控制台
-
erlang - ejabberd:有没有办法确定用户是否是管理员? - 程序控制台
-
docker - 将本地 ElixirErlang 连接到 Docker 容器内正在运行的应用程序 - 程序控制台
-
unicode - 如何在erlang中连接两个utf8字符串? - 程序控制台
-
erlang - 用于Erlang线程的内存监视工具 - 程序控制台
-
erlang - 将 Elixir AST 转换为 Erlang AST?是否可以? - 程序控制台
-
erlang - RabbitMQ源代码-Rabbitmq-boot-steps如何工作? - 程序控制台
-
Erlang 添加用户定义的符号,如 ** 或 <* - 程序控制台
-
erlang - ejabberd 集群,当 master 宕机时 Slave 不工作 - 程序控制台
-
Erlang:有没有办法从我的模块中导出其他模块的导出? - 程序控制台
-
erlang - 是否有处理IO的组长协议(protocol)的规范? - 程序控制台
-
erlang - 更新 nix 包中的依赖项 - 程序控制台
-
erlang - 无法理解如何从ejabberd http请求处理程序中提取帖子数据 - 程序控制台
-
macros - Erlang 中的一等模式? - 程序控制台
-
Erlang escript : exception error: no match of right hand side value {error, enoent} - 程序控制台
-
虚拟机Centos7安装RabbitMQ最新版3.8.5,windows访问解决无法访问ip:15672问题 - 程序控制台
-
erlang - Erlang中的ref是什么? - 程序控制台