• 欢迎大家分享资料!前往留言板评论即可!

Air系列模块Luat版本如何使用http.request接口

合宙 模组资料网 2年前 (2021-05-15) 384次浏览 0个评论 扫描二维码

一、概述

            开发者在使用http.lua提供的http.request接口时,经常遇到“不知道如何填写request接口参数”的问题,首先我们来看下http.request的接口描述

request(method,url,cert,head,body,timeout,cbFnc,rcvFileName)

        

         method,url,cert,timeout,cbFnc,rcvFileName相对来说比较简单,可参考apidemo使用

         接下来,本文以postmanhttp请求为例,来详细说明postman可以正常http访问时配置的参数,如何填充到http.request接口的参数中。如果不会使用postman工具,可百度搜索postman自行下载了解

二、postman工具Params标签下配置的参数

            以访问http://iot.openluat.com/api/site/firmware_upgrade为例,Params标签下不配置任何参数时,如下图所示

Air系列模块Luat版本如何使用http.request接口

         Params标签下配置两个参数,如下图所示:

Air系列模块Luat版本如何使用http.request接口

         可以看出,配置的两个参数以某种格式添加到了httpurl中,成为url的一部分

         所以在Params标签下配置参数后,把自动生成的url直接复制到http.request(method,url,cert,head,body,timeout,cbFnc,rcvFileName)中的url参数即可,例如上图中的url参数为:http://iot.openluat.com/api/site/firmware_upgrade?id=123456&name=test

         本示例调用http.request接口形式如下:

http.request(

    “GET”,

   
http://iot.openluat.com/api/site/firmware_upgrade?id=123456&name=test”,

    nil,

    nil,

    “”,

    60000,

    cbFnc

)

三、postman工具Authorization标签下配置的参数

            此标签下配置的参数为http请求时的认证凭证,可以简单的认为是用户名和密码

         以访问http://iot.openluat.com/api/site/firmware_upgrade为例,Authorization标签下选择Basic Auth认证方式,用户名配置为123,密码配置为456,然后点击Send按钮发送http请求,如下图所示

Air系列模块Luat版本如何使用http.request接口

         点击Send按钮之后,可以发现Headers标签下多了几个自动生成的header,如下图所示

Air系列模块Luat版本如何使用http.request接口

         其中有一个headerKEYAuthorizationVALUEBasic MTIzOjQ1Ng==,这个header实际上就是postman工具根据Authorization标签页下的认证参数自动生成的

         所以Authorization标签页下的参数,实际上对应http请求的一个header,把自动生成的header直接填充到http.request(method,url,cert,head,body,timeout,cbFnc,rcvFileName)中的head参数即可,例如本示例对应的head参数为{ [“Authorization”] = “Basic MTIzOjQ1Ng==” }

         问题又来了,我明明在Authorization标签页下选择了Basic Auth认证方式,用户名为123,密码为456,如何根据Basic Auth123456就生成了Basic MTIzOjQ1Ng==呢?

         其实,Basic MTIzOjQ1Ng==中的Basic表示Basic Auth认证方式,之后跟一个空格(这是协议要求),最后的MTIzOjQ1Ng==123:456base64编码字符串

         本示例对应http.request(method,url,cert,head,body,timeout,cbFnc,rcvFileName)中的head参数,最终可以填充为{ [“Authorization”]
= “Basic “..crypto.base64_encode(“123:456”, (“123:456”):len())
}

         本示例调用http.request接口形式如下:

http.request(

    “GET”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Authorization”]
= “Basic “..crypto.base64_encode(“123:456”, (“123:456”):len())

    },

    “”,

    60000,

    cbFnc

)

        

 

         本章节仅介绍了常见的Basic Auth认证方式,对于其他认证方式没做介绍,如果开发者用到其他认证方式,可以先在百度上搜索所用认证方式最终会修改http请求的哪个字段,是header还是url,然后填充http.request接口中的head或者url参数即可

四、postman工具Headers标签下配置的参数

            此标签页下配置的参数,直接填充到http.request接口中的head参数即可,例如下图,在Headers标签页下手动输入了两个header

Air系列模块Luat版本如何使用http.request接口

         本示例调用http.request接口形式如下:

http.request(

    “GET”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“myKey1″]=”myValue1”,

        [“myKey2″]=”myValue2”,

    },

    “”,

    60000,

    cbFnc

)

        

 

五、postman工具Body标签下配置的参数

            Body标签下有form-datax-www-form-urlencodedrawbinary几种格式,下文将分别介绍

5.1form-data格式

       如下图所示,以form-data格式配置了4个参数,2text字符串,2个文件

Air系列模块Luat版本如何使用http.request接口

         此种body参数,无法直接对http.request的参数进行填充,可使用如下二次封装的接口httpRequestFormData接口来填充参数:

local function httpRequestFormData(method,url,cert,formData,timeout,cbFnc,rcvFileName)

    local
boundary,body,k,v,kk,vv =
“————————–“..os.time()..rtos.tick(),{}

   

    for k,v in
pairs(formData) 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=\””..vv:match(“([^/]+)“)..”\”\r\nContent-Type:
“..(contentType[vv:match(“%.(%w+)
“)] or
“application/octet-stream”)..”\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(

        method,

        url,

        cert,

        {

           
[“Content-Type”] = “multipart/form-data;
boundary=”..boundary,

           
[“Connection”] = “keep-alive”

        },

        body,

        timeout,

        cbFnc,

        rcvFileName

        )  

end

        

         本示例调用httpRequestFormData接口的形式如下:

httpRequestFormData(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        texts =

        {

           
[“myTextKey1”] = “myTextValue1”,

           
[“myTextKey2”] = “myTextValue2”

        },

       

        files =

        {

           
[“myFileKey1”] = “/ldata/file.txt”, —
此处填写文件的完整路径

           
[“myFileKey2”] = “/ldata/file.jpg”, —
此处填写文件的完整路径

        }

    },

    60000,

    cbFnc

)

5.2x-www-form-urlencoded格式

       如下图所示,以x-www-form-urlencoded格式配置了2个参数

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”application/x-www-form-urlencoded”body参数可使用如下接口httpRequestFormData接口来生成:

local 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接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”application/x-www-form-urlencoded”,

    },

    urlencodeTab({[“myKey1″]=”myValue1”,
[“myKey2″]=”myValue2”}),

    60000,

    cbFnc

)

5.3raw格式

       raw又可分为TextJavaScriptJsonHTMLXML几种,下文将分别介绍

       5.3.1Text格式

       如下图所示,以raw Text格式配置了1个字符串123456

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”text/plain”body参数直接填充123456

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”text/plain”,

    },

    “123456”,

    60000,

    cbFnc

)

       5.3.2JavaScript格式

       如下图所示,以raw JavaScript格式配置了1个字符串123456

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”application/javascriptbody参数直接填充123456

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”application/javascript“,

    },

    “123456”,

    60000,

    cbFnc

)

       5.3.3Json格式

       如下图所示,以raw Json格式配置了2个参数

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”application/json”
body参数可使用如下代码来生成:

json.encode(

    {

        [“code”]
= 25,

        [“msg”]
= “test”

    }

)

 

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”application/json”,

    },

    json.encode(

        {

            [“code”] = 25,

            [“msg”] = “test”

        }

    ),

    60000,

    cbFnc

)

       5.3.4HTML格式

       如下图所示,以raw HTML格式配置了1个字符串123456

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”text/html”body参数直接填充123456

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”text/html”,

    },

    “123456”,

    60000,

    cbFnc

)

       5.3.5XML格式

       如下图所示,以raw XML格式配置了1个字符串123456

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加[“Content-Type”]=”text/xml”body参数直接填充123456

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”text/xml”,

    },

    “123456”,

    60000,

    cbFnc

)

5.4binary格式

       如下图所示,以binary格式配置了1个文件file.jpg

Air系列模块Luat版本如何使用http.request接口

         此种格式的body参数,需要对http.requestheadbody参数进行填充,head参数需要添加

         [“Connection”]
= “keep-alive”

         [“Content-Type”]=”xxx”,此处的xxx和文件类型有关,例如jpg文件为image/jpeg,可自行百度搜索Content-Type了解更多,最简单的一种方式是postman点击Send按钮后,会自动在Headers标签下生成Content-Type这个请求头,可直接使用Content-Type这个请求头的值,如下图所示

     Air系列模块Luat版本如何使用http.request接口

         body参数填充文件路径即可

 

         本示例调用http.request接口形式如下:

http.request(

    “POST”,

   
http://iot.openluat.com/api/site/firmware_upgrade”,

    nil,

    {

        [“Content-Type”]=”image/jpeg“,

        [“Connection”]
= “keep-alive”

    },

    {

        [1]={[“file”]
= “/ldata/file.jpg”}–
此处填写文件的完整路径

    },

    60000,

    cbFnc

)

<

p class=”MsoNormal” align=”left” style=”background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; word-break: break-all;”> 


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址