http客户端

Openresty没有提供默认的Http客户端,需要下载第三方的http客户端。

下载lua-resty-http到lualib目录下,使用以下的命令下载:

cd /usr/example/lualib/resty/
wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http_headers.lua  wget https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http.lua

lua-resty-http模块的地址为https://github.com/pintsized/lua-resty-http

安装成功后,通过require(“resty.http”)引入 lua_http模块,它有以下的api方法:

  • syntax: httpc = http.new() 创建一个 http对象

  • syntax: res, err = httpc:request_uri(uri, params)根据参数获取内容,包括:

    • status 状态码

    • headers 响应头

    • body 响应体

vim /usr/example/lua/test_http.lua,写以下代码:

local http = require("resty.http")  local httpc = http.new()  local resp, err = httpc:request_uri("http://s.taobao.com", {  method = "GET",  path = "/search?q=hello",  headers = {  ["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36"  }
})  if not resp then  ngx.say("request error :", err)  return
end  ngx.status = resp.status  for k, v in pairs(resp.headers) do  if k ~= "Transfer-Encoding" and k ~= "Connection" then  ngx.header[k] = v  end
end  ngx.say(resp.body)  httpc:close()

vim /usr/example/example.conf 加上以下的配置:

 location /lua_http {default_type 'text/html';lua_code_cache on;content_by_lua_file /usr/example/lua/test_http.lua;}

在Nginx的配置文件nginx.conf的http部分,加上以下dns解析:

vim /usr/servers/nginx/conf/nginx.conf

resolver 8.8.8.8;

浏览器访问:http://116.196.177.123/lua_http,浏览器会显示淘宝的搜索页。

lua_cjson模块

Json是一种常见的数据交换格式,常用于http通信协议和其他数据传输领域。在openresty默认内嵌了lua_cjson模块,用来序列化数据。

lua_cjson模块的地址:https://www.kyne.com.au/~mark/software/lua-cjson-manual.html

它常用的API如下:

  • local cjson = require “cjson” 获取一个cjson对象

  • local str = cjson.encode(obj) obj转换成string

  • local obj = cjson.decode(str) 将string转obj

vim /usr/example/lua/test_cjson.lua,添加以下内容:

local cjson = require("cjson")  local obj = {  id = 1,  name = "zhangsan",  age = nil,  is_male = false,  hobby = {"film", "music", "read"}
}  local str = cjson.encode(obj)
ngx.say(str, "<br/>")  str = '{"hobby":["film","music","read"],"is_male":false,"name":"zhangsan","id":1,"age":null}'
local obj = cjson.decode(str)  ngx.say(obj.age, "<br/>")
ngx.say(obj.age == nil, "<br/>")
ngx.say(obj.age == cjson.null, "<br/>")
ngx.say(obj.hobby[1], "<br/>")

vim /usr/example/example.conf添加以下内容:

 location ~ /lua_cjson {  default_type 'text/html';  lua_code_cache on;  content_by_lua_file /usr/example/lua/test_cjson.lua;  }

在浏览器上访问http://116.196.177.123/lua_cjson,浏览器显示以下内容:

{"hobby":["film","music","read"],"is_male":false,"name":"zhangsan","id":1}
null
false
true
film

Openresty最佳案例 | 第5篇:http和C_json模块相关推荐

  1. Openresty最佳案例 | 第4篇:OpenResty常见的api

    获取请求参数 vim  /usr/example/example.conf location /lua_var {default_type 'text/plain';content_by_lua_bl ...

  2. ​Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类

    RBAC介绍 RBAC(Role-Based Access Control,基于角色的访问控制),用户基于角色的访问权限控制.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成&q ...

  3. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制

    简介 采用openresty 开发出的api网关有很多,比如比较流行的kong.orange等.这些API 网关通过提供插件的形式,提供了非常多的功能.这些组件化的功能往往能够满足大部分的需求,如果要 ...

  4. Openresty最佳案例 | 第7篇: 模块开发、OpenResty连接Redis

    Lua模块开发 在实际的开发过程中,不可能把所有的lua代码写在一个lua文件中,通常的做法将特定功能的放在一个lua文件中,即用lua模块开发.在lualib目录下,默认有以下的lua模块. lua ...

  5. Openresty最佳案例 | 第3篇:Openresty的安装

    我的服务器为一台全新的centos 7的服务器,所以从头安装openresty,并记录了安装过程中出现的问题,以及解决办法. 1.首先安装openresty cd /usr mkdir servers ...

  6. Openresty最佳案例 | 第1篇:Nginx介绍

    Nginx 简介 Nginx是一个高性能的Web 服务器,同时是一个高效的反向代理服务器,它还是一个IMAP/POP3/SMTP 代理服务器. 由于Nginx采用的是事件驱动的架构,能够处理并发百万级 ...

  7. Openresrt最佳案例 | 第2篇:Lua入门

    什么是lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua 是巴西里约热内卢天主教大学(Po ...

  8. OpenResty 最佳实践

    关注我的人都知道,我基本不在公号推文字消息,但这次我愿意为「温铭」破个例,他是 OpenResty 软件基金会主席,<OpenResty 最佳实践>作者,最近哥们开了个专栏讲 OpenRe ...

  9. Openresrt最佳案例

    第1篇:Nginx介绍 Nginx是一个高性能的Web 服务器,同时是一个高效的反向代理服务器,它还是一个IMAP/POP3/SMTP 代理服务器. 由于Nginx采用的是事件驱动的架构,能够处理并发 ...

最新文章

  1. 最大似然估计的一个示例
  2. Android 热补丁动态修复框架小结
  3. zabbix入门之监控MySQL
  4. Canal Mysql binlog 同步至 Hbase ES
  5. react hoc_如何使用HOC模式开发React超能力
  6. 运营商数据治理实践-郭岳
  7. 开园第一篇献给找不回来的园子。。
  8. CentOS 下 Oracle 10g 安装 + 配置 全过程(图解)
  9. 全国土壤阳离子交换量CEC空间分布数据
  10. 奥哲徐平俊:乘风、冒险与未来
  11. 怎么更改计算机上的限制应用,图文详解通过修改win10系统组策略实现限制指定应用程序的运行-系统操作与应用 -亦是美网络...
  12. 微信公众号查题搜题平台 功能齐全
  13. FLASH三维照片墙组件(源文件)
  14. 自定义注解:具体的设计作用一般看过滤器的实现(以@Secured为例子部分理解)
  15. 计算机光驱无法启用,win10系统没法启动光驱怎么解决
  16. VTK中oberver 和 command 的信息机制详解
  17. 那些会阻碍程序员成长的细节
  18. 灰色页面,HTML灰色页面
  19. excel表显示为数字但是却无法进行数值运算
  20. 想和程序员小哥哥做朋友

热门文章

  1. 背单词:3年,34150分钟!
  2. 模板引擎:VelocityFreeMarker(转)
  3. Linux-TCP/IP TIME_WAIT状态原理
  4. 几种任务调度的 Java 实现方法与比较
  5. COJN 0575 800601滑雪
  6. 八种简易健康减肥瘦身法
  7. hdu 4366 Card Collector (容斥原理)
  8. UITableView注意点
  9. 支持支付宝(Alipay)付款的三个美国主机商
  10. 技术图文:如何利用BigOne的API制作自动化交易系统 -- 获取账户资产