发起 GET 请求 (http.get)
声明
HTTP状态码, 返回头JSON文本, 返回主体 = http.get(URL [, 超时秒, 请求头, URL不ESCAPE ])
声明(命名参数)
20250625 支持
HTTP状态码, 返回头JSON文本, 返回主体 = http.get{
url = URL;
timeout = 超时秒;
headers = 请求头;
params = Query参数;
download_file = 请求成功返回主体保存文件路径;
}
参数
- URL 文本型,需要请求的 URL 地址,该方法默认会对 URL 进行百分号 escape 处理,如不需要可参考 URL不ESCAPE 参数说明
- 超时秒 实数型,可选参数,请求超时时间,单位秒,默认 10
- 请求头 表型,可选参数,发出的请求的头部信息,形式
{field1 = value1, field2 = value2, ...},默认{} - Query参数 表型,可选参数,发出的请求的 Query 参数,形式
{field1 = value1, field2 = value2, ...},默认{} - 请求成功返回主体保存文件路径 文本型,可选参数,如果有该参数,则请求成功后返回主体为保存的文件路径
- URL不ESCAPE 布尔型,可选参数,true 表示不对 URL 进行 escape 直接请求,默认 false 对 URL 进行自定义 escape 可参考 lcurl 模块 的 easy :escape、easy :unescape
返回值
- HTTP状态码 整数型,返回当次请求的 http 状态码,请求超时返回 -1
- 返回头JSON文本 文本型 或 nil,请求完成返回的 JSON 形式头部信息,请求超时返回 nil
- 返回主体 字符串型 或 nil,请求完成返回的内容,如果请求主体保存到文件,则此值为文件路径,请求超时返回 nil
说明
使用 HTTP/1.1 协议的 GET 方法请求获取网络资源
这个函数不会将资源存储到磁盘上,如果需要下载较大的网络资源,建议使用 http.download
这个函数可能会让出,在这个函数返回之前,其它的 线程 可能会得到运行机会
若服务器协议版本为 HTTP/1.0 或 HTTP/0.9,可使用 httpGet 方法替代
返回主体 = httpGet(URL, 超时秒)
示例
local code, res_headers, body = http.get("https://httpbin.org/get?hello=world&你好=世界", 15, {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- 模拟 IE8 的请求
["Cookie"] = "a=1; b=2; c=3"; -- 顺带 Cookie 提交
})
if code == 200 then -- 如果返回的状态码是 HTTP_OK
sys.alert(body)
end
注:上述代码中使用了非本章函数 sys.alert
示例(命名参数)
local code, res_headers, body = http.get{
url = "https://httpbin.org/get";
timeout = 15;
headers = {
["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; -- 模拟 IE8 的请求
["Cookie"] = "a=1; b=2; c=3"; -- 顺带 Cookie 提交
};
params = {
["hello"] = "world";
["你好"] = "世界";
};
}
if code == 200 then -- 如果返回的状态码是 HTTP_OK
sys.alert(body)
end
注:上述代码中使用了非本章函数 sys.alert
http.get 封装获取外网IP实例
function get_ip()
local done = false
thread.dispatch(function()
while (true) do
if (done) then
sys.toast("", -1)
return
else
sys.toast("正在获取 IP 地址...", device.front_orien())
end
sys.msleep(2000)
end
end)
while (true) do
local c, h, b = http.get("https://ip.chinaz.com/?ts="..tostring(sys.rnd()), 60)
if (c==200) then
sys.toast("", -1)
done = true
return b:match('您的本机IP地址:(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?)')
end
end
end
--
-- 将以上代码拷贝到自己的脚本最前面,然后在脚本中使用
sys.alert(get_ip())
注:上述代码中使用了非本章函数 sys.alert、sys.toast、sys.msleep、sys.rnd、thread.dispatch、device.front_orien