当前位置: 首页 > news >正文

如何通过Lua语言请求接口拿到数据

文章目录

    • 概要
    • http客户端
    • 通过请求下载数据

概要

当某个需求是需要在模块内请求接口拿到数据,需要使用http客户端调用接口

http客户端

LuaSOC请求接口官方文档

调用:http.request(method,url,headers,body,opts,ca_file,client_ca, client_key, client_password)

参数:

传入值类型

解释

string

请求方法, 支持 GET/POST 等合法的HTTP方法

string

url地址, 支持 http和https, 支持域名, 支持自定义端口

tabal

请求头 可选 例如 {[“Content-Type”] = “application/x-www-form-urlencoded”}

string/zbuff

body 可选

table

额外配置 可选 包含 timeout:超时时间单位ms 可选,默认10分钟,写0即永久等待 dst:下载路径,可选 adapter:选择使用网卡,可选 debug:是否打开debug信息,可选,ipv6:是否为ipv6 默认不是,可选 callback:下载回调函数,参数 content_len:总长度 body_len:以下载长度 userdata 用户传参,可选 userdata:回调自定义传参

string

服务器ca证书数据, 可选, 一般不需要

string

客户端ca证书数据, 可选, 一般不需要, 双向https认证才需要

string

客户端私钥加密数据, 可选, 一般不需要, 双向https认证才需要

string

客户端私钥口令数据, 可选, 一般不需要, 双向https认证才需要

返回值:

返回值类型

解释

int

code , 服务器反馈的值>=100, 最常见的是200.如果是底层错误,例如连接失败, 返回值小于0

tabal

headers 当code>100时, 代表服务器返回的头部数据

string/int

body 服务器响应的内容字符串,如果是下载模式, 则返回文件大小

headers请求头有就写没有就空的,body参数也是的

GET请求

http.request("GET","http://www.baidu.com",{},"",opts)

POST请求

http.request("POST","http://www.baidu.com",{},"",opts)

通过请求下载数据

下载文件的示例代码:

--[[
xmodem 下载文件
@api downloadFile(url, destination,texpected_md5ype)
@string url http客户端请求地址
@string destination 文件路径
@string expected_md5 MD5校验
@return bool 结果
@usage
downloadFile("http://www.bai.com","/luadb/test.bin")
]]
-- -- 下载文件并验证MD5
local CONFIG = {destination = "/data.bin",timeout = 30000,          -- 超时时间(毫秒)max_retries = 3,          -- 最大重试次数retry_delay = 1000,       -- 重试间隔时间(毫秒)
}
local function downloadFile(url, destination, expected_md5)local req_headers = {['Content-Type'] = 'application/octet-stream',['Accept'] = 'application/octet-stream'}for attempt = 1, CONFIG.max_retries dolog.info(string.format("下载尝试 %d/%d: %s", attempt, CONFIG.max_retries, url))local opts = {dst = destination,timeout = CONFIG.timeout}local response = http.request("GET", url, req_headers, "", opts)if not response thenlog.error("HTTP 请求失败")elselocal code, headers, body = response.wait()log.info("HTTP 响应", "状态码:", code)if code == 200 thenlog.info("文件成功下载到:", destination)-- 打开并读取下载的文件local f = io.open(destination, "rb")log.info("打开的文件",f)if not f thenlog.error("无法打开文件:", destination)elselocal data = f:read("*a")f:close()if not data thenlog.error("文件读取失败:", destination)else-- 验证文件内容local crc = crypto.md5(data)log.info("MD5 校验", crc)if crc == expected_md5 thenlog.info("MD5 校验通过")sys.publish("download_success", true)http_download.download_request = 1return trueelselog.error("MD5 校验未通过")sys.publish("download_success", false)http_download.download_request = 0return falseendendendelselog.error("HTTP 请求失败,状态码:", code)endend-- 如果下载失败,等待后重试if attempt < CONFIG.max_retries thenlog.warn(string.format("下载失败,%d毫秒后重试...", CONFIG.retry_delay))sys.wait(CONFIG.retry_delay)endend-- 所有重试尝试均失败log.error("所有下载尝试均失败")sys.publish("download_success", false)return false
end-- 下载任务初始化
sys.taskInit(function()sys.wait(500)sys.waitUntil("IP_READY") -- 等待网络连接log.info("网络已就绪,开始等待下载指令...")while true dolocal _, data = sys.waitUntil("download")if data thenlocal downloadUrl = data:sub(5, -35)local expected_md5 = data:sub(-32, -1)local destination = CONFIG.destinationlog.info("收到下载指令:", string.fromHex(downloadUrl), "预期MD5:", expected_md5)if downloadUrl and #downloadUrl > 0 thenlocal decoded_url = string.fromHex(downloadUrl)if decoded_url and #decoded_url > 0 thendownloadFile(decoded_url, destination, expected_md5)elselog.error("下载URL解码失败或为空")sys.publish("download_success", false)endelselog.warn("下载URL无效或为空")sys.publish("download_success", false)endelselog.warn("未收到有效的下载指令")sys.wait(600000) -- 休眠10分钟后继续循环endend
end)

下载成功的示例:

相关文章:

如何通过Lua语言请求接口拿到数据

文章目录 概要http客户端通过请求下载数据 概要 当某个需求是需要在模块内请求接口拿到数据&#xff0c;需要使用http客户端调用接口 http客户端 LuaSOC请求接口官方文档 调用&#xff1a;http.request(method,url,headers,body,opts,ca_file,client_ca, client_key, clien…...

Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。...

自由学习记录(14)

unity操作问题 位置&#xff1a;子物体的位置是相对于父物体的。如果你移动父物体&#xff0c;子物体会保持相对于父物体的相对位置&#xff0c;跟着一起移动。 旋转&#xff1a;子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放&#xf…...

疯狂Spring Boot讲义[推荐1]

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书&#xff0c;作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书&#xff0c;它是真正讲解Spring Boot的图书。Spring Boot的核心…...

vue中$nextTick的作用是什么,什么时候使用

$nextTick 是 Vue 提供的一个方法&#xff0c;用于在下一次 DOM 更新周期之后执行回调函数。它通常用于在 Vue 完成数据更新后&#xff0c;需要访问更新后的 DOM 状态时&#xff0c;保证操作的是更新后的 DOM。 工作原理&#xff1a; Vue 是异步更新 DOM 的&#xff0c;当数据…...

Redis实现全局ID生成器

全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…...

Xshell远程连接工具详解

Xshell是一款在Windows平台上运行的远程连接工具&#xff0c;它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。Xshell通过互联网实现对远程主机的安全连接&#xff0c;帮助用户在复杂的网络环境中享受他们的工作。本文将详细介绍Xshell的溯源、最新版本以及它的优势。…...

如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?

以下是一种在Verilog设计的磁盘阵列控制器中实现不同RAID级别(以RAID 0和RAID 1为例)切换的方法: 添加控制信号 在磁盘阵列控制器模块中添加一个输入信号,例如raid_mode,用于选择RAID模式。假设raid_mode = 0表示RAID 0模式,raid_mode = 1表示RAID 1模式。module raid_co…...

基于元神操作系统实现NTFS文件操作(十)

1. 背景 本文补充介绍文件遍历操作的部分附加内容&#xff0c;譬如&#xff0c;过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等&#xff0c;并提供了基于元神操作系统的部分实现代码。 2. 方法 &#xff08;1&#xff09;过滤掉系统元文件 NTFS文件系统的前16个元…...

Qt的几个函数方法

void receiveInfo1() {// 假设这是从串口接收到的字符串QString receivedString "23.5C,45%,1012hPa";// 使用逗号分隔符分割字符串QStringList parts receivedString.split(,);// 检查分割后的列表是否有足够的部分if (parts.size() > 3) {QString part1 part…...

openpnp - bug - 散料飞达至少定义2个物料

文章目录 openpnp - bug - 散料飞达至少定义2个物料笔记END openpnp - bug - 散料飞达至少定义2个物料 笔记 散料飞达上定义的物料个数用完了&#xff0c;现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料&#xff0c;找到了。 定义散料飞达的料为1个&…...

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息&#xff1a; Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…...

数据库的构成与手写简单数据库的探索

一、引言 在当今数字化的时代&#xff0c;数据库扮演着至关重要的角色。无论是企业管理系统、电子商务平台还是各种移动应用&#xff0c;都离不开数据库的支持。数据库是存储和管理数据的核心工具&#xff0c;它的高效性、可靠性和安全性对于数据的处理和应用至关重要。本文将…...

基于STM32的智能晾衣架设计

引言 随着智能家居的普及&#xff0c;智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器&#xff0c;能够自动感知天气变化、湿度、光照等环境因素&#xff0c;实现自动升降、风干和报警功能&#xff0c;帮助用户更加高效地晾晒衣物。本项目基于STM32设…...

【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)

文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame&#xff0c;对于二者教程很少&#xff0c;使用直接写控件然后调属性&#xff0c;没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...

深度学习:pandas篇

1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas&#xff0c;我们用 pd 来代替 Pandas 的全称&#xff0c;这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...

Redis学习文档(Redis基本数据类型【Hash、Set】)

Hash&#xff08;哈希&#xff09; 介绍 Redis 中的 Hash 是一个 String 类型的 field-value&#xff08;键值对&#xff09; 的映射表&#xff0c;特别适合用于存储对象&#xff0c;后续操作的时候&#xff0c;你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...

15分钟学Go 第9天:函数的定义与调用

第9天&#xff1a;函数的定义与调用 欢迎来到第9天的Go语言学习模块&#xff01;今天我们将深入探讨函数的定义与调用&#xff0c;帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础&#xff0c;也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...

Java虚拟机:JVM介绍

1024 程序员节日快乐&#xff01;愿您我的代码永远没有 bug &#xff0c;人生永远没有 bug &#xff01; JVM 概述JVM 架构 概述 JVM&#xff08; Java Virtual Machine &#xff0c;Java 虚拟机&#xff09;&#xff0c;是 Java 语言的运行环境&#xff0c;是运行所有 Java 程…...

R数据科学 16.5.3练习题

(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...

May协程库调优手册:如何正确配置协程栈大小

May协程库调优手册&#xff1a;如何正确配置协程栈大小 【免费下载链接】may rust stackful coroutine library 项目地址: https://gitcode.com/gh_mirrors/ma/may May是一个基于Rust的栈式协程库&#xff0c;它为开发者提供了轻量级的并发编程能力。由于May不支持自动栈…...

【flutter for open harmony】第三方库 Flutter 鸿蒙实战:get_it 依赖注入 + 模块化架构优化,项目秒变企业级✨

&#x1f680; Flutter 鸿蒙实战&#xff1a;get_it 依赖注入 模块化架构优化&#xff0c;项目秒变企业级✨ 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net&#x1f44b; 前言 哈喽各位小伙伴&#xff01;我是持续深耕 Flutter 鸿蒙跨平台…...

告别ArcGIS手动操作:用Python脚本批量处理MCD12Q2植被物候数据(附完整代码)

用Python全自动处理MODIS物候数据&#xff1a;从HDF到生长季分析的完整解决方案 在植被物候研究中&#xff0c;MCD12Q2数据集因其高时间分辨率和全球覆盖能力成为不可替代的数据源。但面对动辄数十GB的HDF文件&#xff0c;传统ArcGIS点选操作不仅效率低下&#xff0c;更难以应对…...

Android设备变身轻量级Web服务器:AndServer实战与RESTful API构建

1. 为什么要在Android设备上搭建Web服务器&#xff1f; 你可能从来没想过&#xff0c;自己手里的Android手机或平板还能变身成一台轻量级Web服务器。这个看似小众的需求&#xff0c;在实际开发中却非常实用。想象一下这样的场景&#xff1a;你正在开发一个需要与后端交互的App&…...

Windows Cleaner:如何通过3个简单步骤解决C盘空间不足和系统卡顿问题

Windows Cleaner&#xff1a;如何通过3个简单步骤解决C盘空间不足和系统卡顿问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windo…...

Qwen3-TTS-Tokenizer-12Hz音频编解码器:5分钟快速部署与一键使用教程

Qwen3-TTS-Tokenizer-12Hz音频编解码器&#xff1a;5分钟快速部署与一键使用教程 1. 为什么选择Qwen3-TTS-Tokenizer-12Hz 如果你正在寻找一个高效、高质量的音频编解码解决方案&#xff0c;Qwen3-TTS-Tokenizer-12Hz绝对值得考虑。这个由阿里巴巴Qwen团队开发的工具&#xf…...

Cursor Pro限制突破指南:如何免费享受高级AI编程功能

Cursor Pro限制突破指南&#xff1a;如何免费享受高级AI编程功能 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tria…...

8大网盘直链下载助手完整指南:告别限速,轻松获取真实下载地址

8大网盘直链下载助手完整指南&#xff1a;告别限速&#xff0c;轻松获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中…...

新手避坑指南:从零组装你的第一台Pixhawk四旋翼无人机(附PX4固件刷写教程)

新手避坑指南&#xff1a;从零组装你的第一台Pixhawk四旋翼无人机&#xff08;附PX4固件刷写教程&#xff09; 刚拆开快递箱时&#xff0c;那些散落的电机、飞控和电调模块可能会让你手足无措——这正是三年前我的真实写照。作为过来人&#xff0c;我整理出这份包含21个关键检查…...

别再手动调Anchor了!用YOLOv5自带的K-means+遗传算法,为你的数据集定制最佳Anchor Box

告别手动调参&#xff1a;YOLOv5自动Anchor优化全攻略 在目标检测领域&#xff0c;Anchor Boxes的设置一直是影响模型性能的关键因素。传统方法依赖人工经验或反复试错&#xff0c;不仅耗时耗力&#xff0c;还难以达到最优效果。YOLOv5框架内置的K-means聚类与遗传算法组合方案…...