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微信公众号可以向我提问。
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!