高效的接口调用 - httpc库
httpc
库基于cf
框架都内部实现的异步IO
编写的http client
库.
httpc
库内置SSL
支持, 在不使用代理的情况下就可以请求第三方接口.
httpc
支持header
、args
、body
、timeout
请求设置, 完美支持各种httpc
调用方式.
一、httpc介绍
使用前需要手动导入httpc
库: local httpc = require "httpc"
.
1. httpc.get
函数原型: httpc.get(domain, headers, args, timeout)
参数分别是:
domain
是一个符合URL
定义规范的字符串;headers
是请求头部, 一般用于添加自定义头部, 一般为结构为:{{key1, value1}, {key2, value2} ... }
;args
是请求参数; 对于{{"a", 1}, {"b", 2}}
这样的数据将会格式化为:a=1&b=2
;timeout
定义了请求的超时时间, 参数的类型为Number
;
2. httpc.post
函数原型: httpc.post(domain, headers, body, timeout)
参数分别是:
domain
是一个符合URL
定义规范的字符串;headers
是请求头部, 一般用于添加自定义头部, 一般为结构为:{{key1, value1}, {key2, value2} ... }
;body
是请求体; 对于{{"a", 1}, {"b", 2}}
这样的数据将会格式化为:a=1&b=2
;timeout
定义了请求的超时时间, 参数的类型为Number
;需要注意的是: 这个API发送的请求方法是
POST
,Content-Type
为application/x-www-form-urlencoded
.
3. httpc.json
函数原型: httpc.json(domain, headers, json, timeout)
参数分别是:
domain
是一个符合URL
定义规范的字符串;headers
是请求头部, 一般用于添加自定义头部, 一般为结构为:{{key1, value1}, {key2, value2} ... }
;json
是请求体; 内部是一个合法json或者合法table
即可(不可包含NULL
/function
/userdata
);timeout
定义了请求的超时时间, 参数的类型为Number
;需要注意的是: 这个API发送的请求方法是
POST
,Content-Type
为application/json
.
4. httpc.file
函数原型: httpc.json(domain, headers, json, timeout)
参数分别是:
domain
是一个符合URL
定义规范的字符串;headers
是请求头部, 一般用于添加自定义头部, 一般为结构为:{{key1, value1}, {key2, value2} ... }
;json
是请求体; 内部是一个合法json或者合法table
即可(不可包含NULL
/function
/userdata
);timeout
定义了请求的超时时间, 参数的类型为Number
;需要注意的是: 这个API发送的请求方法是
POST
,Content-Type
为application/json
.
二、"一次性请求"
什么是一次性请求
呢? 每次我们使用httpc
库在请求其他服务的接口, 都会在接口返回后关闭连接.
这在日常使用中也不是大问题, 但是我们需要多次请求同一个接口的时候. 如果不进行一些连接复用
, 显然不是那么高效.
框架为了解决这个问题, 提出了使用httpc库的扩展 - httpc.class
来完成的方法.
三、httpc.class使用
要使用httpc.class
需要导入httpc的class库, 导入方式为: local httpc = require "httpc.class"
.
当需要使用httpc.class
发起请求之前, 需要先创建一个对象, 如: local hc = httpc:new({})
.
hc
与httpc
拥有相同的方法, 但是需要hc
必须要使用":"
的调用方式. 否则框架会抛出异常.
并且hc
对象在使用完毕后, 必须使用hc:close()
方法来显示关闭
; 否则会造成内存泄漏
的问题.
四、开始实践
现在, 让我们尝试将上面学到的内容运用到实践中.
1. 编写httpd server
local httpd = require