| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- --- 模块功能:HTTP功能测试.
- -- @author openLuat
- -- @module http.testHttp
- -- @license MIT
- -- @copyright openLuat
- -- @release 2018.03.23
- module(...,package.seeall)
- require"http"
- --local function cbFnc(result,prompt,head,body)
- -- log.info("testHttp.cbFnc",result,prompt)
- -- if result and head then
- -- for k,v in pairs(head) do
- -- log.info("testHttp.cbFnc",k..": "..v)
- -- end
- -- end
- -- if result and body then
- -- log.info("testHttp.cbFnc","bodyLen="..body:len())
- -- end
- --end
- --
- --local function cbFncFile(result,prompt,head,filePath)
- -- log.info("testHttp.cbFncFile",result,prompt,filePath)
- -- if result and head then
- -- for k,v in pairs(head) do
- -- log.info("testHttp.cbFncFile",k..": "..v)
- -- end
- -- end
- -- if result and filePath then
- -- local size = io.fileSize(filePath)
- -- log.info("testHttp.cbFncFile","fileSize="..size)
- --
- -- --输出文件内容,如果文件太大,一次性读出文件内容可能会造成内存不足,分次读出可以避免此问题
- -- if size<=4096 then
- -- log.info("testHttp.cbFncFile",io.readFile(filePath))
- -- else
- --
- -- end
- -- end
- -- --文件使用完之后,如果以后不再用到,需要自行删除
- -- if filePath then os.remove(filePath) end
- --end
- --
- --local function rcvFileName(stepData,totalLen,statusCode)
- -- log.info("http statusCode",statusCode,totalLen)
- -- if stepData and totalLen <= 4096 then
- -- --输出文件内容,如果文件太大,一次性读出文件内容可能会造成内存不足,分次读出可以避免此问题
- -- log.info("http rcvData",stepData,totalLen)
- -- else
- --
- -- end
- --end
- --http.request("GET","www.lua.org",nil,nil,nil,nil,cbFnc)
- --http.request("GET","https://www.baidu.com",{caCert="ca.crt"},nil,nil,nil,cbFnc)
- --http.request("GET","www.lua.org",nil,nil,nil,30000,cbFncFile,"download.bin")
- --http.request("GET","www.lua.org",nil,nil,nil,30000,nil,rcvFileName)
- --http.request("GET","http://www.lua.org",nil,nil,nil,30000,cbFnc)
- --http.request("GET","www.lua.org/about.html",nil,nil,nil,30000,cbFnc)
- --http.request("GET","www.lua.org:80/about.html",nil,nil,nil,30000,cbFnc)
- --http.request("POST","www.iciba.com",nil,nil,"Luat",30000,cbFnc)
- --http.request("POST","36.7.87.100:6500",nil,{head1="value1"},{[1]="begin\r\n",[2]={file="/lua/http.lua"},[3]="end\r\n"},30000,cbFnc)
- --http.request("POST","http://lq946.ngrok.xiaomiqiu.cn/",nil,nil,{[1]="begin\r\n",[2]={file_base64="/lua/http.lua"},[3]="end\r\n"},30000,cbFnc)
- --如下示例代码是利用文件流模式,上传录音文件的demo,使用的URL是随意编造的
- --[[
- http.request("POST","www.test.com/postTest?imei=1&iccid=2",nil,
- {['Content-Type']="application/octet-stream",['Connection']="keep-alive"},
- {[1]={['file']="/RecDir/rec001"}},
- 30000,cbFnc)
- ]]
- --如下示例代码是利用x-www-form-urlencoded模式,上传3个参数,通知openluat的sms平台发送短信
- --[[
- function urlencodeTab(params)
- local msg = {}
- for k, v in pairs(params) do
- table.insert(msg, string.urlEncode(k) .. '=' .. string.urlEncode(v))
- table.insert(msg, '&')
- end
- table.remove(msg)
- return table.concat(msg)
- end
- http.request("POST","http://api.openluat.com/sms/send",nil,
- {
- ["Authorization]"="Basic jffdsfdsfdsfdsfjakljfdoiuweonlkdsjdsjapodaskdsf",
- ["Content-Type"]="application/x-www-form-urlencoded",
- },
- urlencodeTab({content="您的煤气检测处于报警状态,请及时通风处理!", phone="13512345678", sign="短信发送方"}),
- 30000,cbFnc)
- ]]
- --如下示例代码是利用multipart/form-data模式,上传2参数和1个照片文件
- local function postMultipartFormData(url,cert,params,timeout,cbFnc,rcvFileName)
- local boundary,body,k,v,kk,vv = "--------------------------"..os.time()..rtos.tick(),{}
- for k,v in pairs(params) do
- if k=="texts" then
- local bodyText = ""
- for kk,vv in pairs(v) do
- bodyText = bodyText.."--"..boundary.."\r\nContent-Disposition: form-data; name=\""..kk.."\"\r\n\r\n"..vv.."\r\n"
- end
- body[#body+1] = bodyText
- elseif k=="files" then
- local contentType =
- {
- jpg = "image/jpeg",
- jpeg = "image/jpeg",
- png = "image/png",
- }
- for kk,vv in pairs(v) do
- print(kk,vv)
- body[#body+1] = "--"..boundary.."\r\nContent-Disposition: form-data; name=\""..kk.."\"; filename=\""..kk.."\"\r\nContent-Type: "..contentType[vv:match("%.(%w+)$")].."\r\n\r\n"
- body[#body+1] = {file = vv}
- body[#body+1] = "\r\n"
- end
- end
- end
- body[#body+1] = "--"..boundary.."--\r\n"
- http.request(
- "POST",
- url,
- cert,
- {
- ["Content-Type"] = "multipart/form-data; boundary="..boundary,
- ["Connection"] = "keep-alive"
- },
- body,
- timeout,
- cbFnc,
- rcvFileName
- )
- end
- postMultipartFormData(
- "1.202.80.121:4567/api/uploadimage",
- nil,
- {
- texts =
- {
- ["imei"] = "862991234567890",
- ["time"] = "20180802180345"
- },
- files =
- {
- ["logo_color.jpg"] = "/ldata/logo_color.jpg"
- }
- },
- 60000,
- cbFnc
- )
|