前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FreeSWITCH中的HTTP接口

FreeSWITCH中的HTTP接口

作者头像
Seven Du
发布2020-12-21 14:22:05
2.6K0
发布2020-12-21 14:22:05
举报
文章被收录于专栏:FreeSWITCH中文社区

HTTP协议是当今最流行的通信协议。FreeSWITCH即可以作为一个HTTP Client,也可以作为一个HTTP Server与其它系统对接。

今天,我们先说说HTTP Server。

FreeSWITCH中有两个模块支持HTTP Server功能。

mod_xml_rpc

该模块是最早的HTTP Server功能,在FreeSWITCH Console上执行

load mod_xml_rpc

可以看到类似如下输出:

mod_xml_rpc.c:1242 Starting HTTP Port 8080, DocRoot [/usr/local/freeswitch/htdocs]

表明一个监听8080端口的HTTP Server已经准备好了。

该模块默认使用HTTP Basic验证,用户名和密码都在xml_rpc.conf.xml中配置。

用浏览器打开FreeSWITCH服务器的8080端口,输入密码,就进入了一个小型的网站。里面的功能不多,不过,FreeSWITCH自己带了一个小小的FreeSWITCH Portal,这一块在《FreeSWITCH权威指南》里写得很详细,我们就不多说了。

我们来看看它提供的API:

$ curl --user freeswitch:works localhost:8080/api/status

<h1>FreeSWITCH Status</h1>

2015-06-30 18:42:49<br>

UP 0 years, 1 day, 21 hours, 31 minutes, 33 seconds, 325 milliseconds, 220 microseconds<br>

FreeSWITCH (Version 1.7.0 git 2a1195e 2015-06-26 19:51:40Z 64bit) is ready<br>

2 session(s) since startup<br>

0 session(s) - peak 1, last 5min 0 <br>

0 session(s) per Sec out of max 30, peak 1, last 5min 0 <br>

1000 session(s) max<br>

min idle cpu 0.00/100.00<br>

Current Stack Size/Max 240K/8192K

很熟悉吧,跟在console上执行的结果基本一样。如果你熟悉curl的话,你就明白以上命令向FreeSWITCH发了一个HTTP请求,并得到了结果。

其实我们完全可以执行更复杂的命令,如

$ curl --user freeswitch:works localhost:8080/api/sofia?status

Name Type Data State

=================================================================================================

192.168.7.6 alias internal ALIASED

external profile sip:mod_sofia@192.168.7.6:5080 RUNNING (0)

.....

甚至发起一个呼叫,如:

curl --user freeswitch:works "localhost:8080/api/originate?user/1000%20%26echo"

其中,参数经过urlencode处理,经过FreeSWITCH urldecode以后的命令就相当于:

originate usr/1000 &echo

当然,更强大的还在后台,因为,你可以调用lua

$ curl --user freeswitch:works "localhost:8080/api/lua?/tmp/test.lua"

Hi, 欢迎交流FreeSWITCH-CN微信公众号

对应的Lua脚本内容如下: /tmp/test.lua

stream:write("Hi, 欢迎交流FreeSWITCH-CN微信公众号\n")

有了Lua,就有了无限可能。比方,你可以POST一些参数:

$ curl --user freeswitch:works -XPOST -d "a=1&b=2" "localhost:8080/api/lua?/tmp/test.lua"

Hi, 欢迎交流FreeSWITCH-CN微信公众号, 我收到的参数是 a=1 b=2

对应的Lua脚本是:

a = env:getHeader("a")

b = env:getHeader("b")

stream:write("Hi, 欢迎交流FreeSWITCH-CN微信公众号, 参数是 a=" .. a .. " b=" .. b .. "\n")

大家已经看到,FreeSWITCH会将收到的POST参数存到env变量里,env是一个标准的Event变量,可以用getHeader取到参数的值。如果想查看全部的env变量,可以在脚本中加入以下代码:

stream:write(env:serialize());

你甚至可以POST XML,如:

curl --user freeswitch:works -XPOST -d '<xml><a>100</a><b>200</b></xml>' -H "Content-Type: application/xml" "localhost:8080/api/lua?/tmp/test.lua"

如果你像上面一个使用了stream:write()的话,你就知道怎么取得这段XML字符串了。

好玩吧?

如果觉得对你有用,赏点钱。如果没开通微信支付的话,也顺手点一下赞,又不费电。

你的支持和鼓励有助于我保持写作激情,也有助于写出更好的内容。

另外,mod_verto也有完整的HTTP Server支持,并支持HTTP 1.1和Websocket,功能也更强大,如果有时间(zan sang)我就会继续写。

最后,今年的FreeSWITCH沙龙将于9月份在北京举行,如果有希望上台演讲的或者赞助商可以跟我联系了。

FreeSWITCH问答继续进行,关注FreeSWITCH-CN微信公众号可以向我提问。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档