如何通过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客户端通过请求下载数据 概要 当某个需求是需要在模块内请求接口拿到数据,需要使用http客户端调用接口 http客户端 LuaSOC请求接口官方文档 调用: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操作问题 位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。 旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放…...
疯狂Spring Boot讲义[推荐1]
《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书,作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书,它是真正讲解Spring Boot的图书。Spring Boot的核心…...
vue中$nextTick的作用是什么,什么时候使用
$nextTick 是 Vue 提供的一个方法,用于在下一次 DOM 更新周期之后执行回调函数。它通常用于在 Vue 完成数据更新后,需要访问更新后的 DOM 状态时,保证操作的是更新后的 DOM。 工作原理: Vue 是异步更新 DOM 的,当数据…...
Redis实现全局ID生成器
全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…...
Xshell远程连接工具详解
Xshell是一款在Windows平台上运行的远程连接工具,它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。Xshell通过互联网实现对远程主机的安全连接,帮助用户在复杂的网络环境中享受他们的工作。本文将详细介绍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. 背景 本文补充介绍文件遍历操作的部分附加内容,譬如,过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等,并提供了基于元神操作系统的部分实现代码。 2. 方法 (1)过滤掉系统元文件 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个物料 笔记 散料飞达上定义的物料个数用完了,现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料,找到了。 定义散料飞达的料为1个&…...
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException
HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息: Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…...
数据库的构成与手写简单数据库的探索
一、引言 在当今数字化的时代,数据库扮演着至关重要的角色。无论是企业管理系统、电子商务平台还是各种移动应用,都离不开数据库的支持。数据库是存储和管理数据的核心工具,它的高效性、可靠性和安全性对于数据的处理和应用至关重要。本文将…...
基于STM32的智能晾衣架设计
引言 随着智能家居的普及,智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器,能够自动感知天气变化、湿度、光照等环境因素,实现自动升降、风干和报警功能,帮助用户更加高效地晾晒衣物。本项目基于STM32设…...
【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)
文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame,对于二者教程很少,使用直接写控件然后调属性,没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...
深度学习:pandas篇
1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas,我们用 pd 来代替 Pandas 的全称,这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...
Redis学习文档(Redis基本数据类型【Hash、Set】)
Hash(哈希) 介绍 Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...
15分钟学Go 第9天:函数的定义与调用
第9天:函数的定义与调用 欢迎来到第9天的Go语言学习模块!今天我们将深入探讨函数的定义与调用,帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础,也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...
Java虚拟机:JVM介绍
1024 程序员节日快乐!愿您我的代码永远没有 bug ,人生永远没有 bug ! JVM 概述JVM 架构 概述 JVM( Java Virtual Machine ,Java 虚拟机),是 Java 语言的运行环境,是运行所有 Java 程…...
R数据科学 16.5.3练习题
(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...
通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0
问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...
简易CPU设计入门:验证取指令模块
项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后ÿ…...
【MySQL数据库】MySQL主从复制
文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置(以 Slave1 为例&…...
CDC变更数据捕捉技术是什么?和ETL有什么不同?
一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…...
一种用于推进欧洲临床中心中风管理的联邦学习平台即服务
论文标题:A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息: Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...
给哔哩哔哩bilibili电脑版做个手机遥控器
前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…...
opencv dnn模块 示例(27) 目标检测 object_detection 之 yolov11
文章目录 1、YOLO v11 介绍1.1、改进点特性1.2、性能对比1.3、多任务支持 2、测试2.1、官方Python测试2.2、Opencv dnn测试2.3、测试统计 3、训练 1、YOLO v11 介绍 YOLO11是Ultralytics实时目标探测器系列中最新的迭代版本,重新定义尖端的精度、速度和效率。在以往…...
鸿蒙开发融云demo初始化和登录
鸿蒙开发融云IMKit初始化和登录 融云鸿蒙版是不带UI的,得自己一步步搭建。 下面说如何初始化和登录: 一、初始化: /*** desc : 初始化融云* author : congge on 2024-07-12 15:47**/public static initRongIm() {IMEngine.getInstance()…...
手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?
在信息高度发达的社会中,我们通过手机可以实现非常多的操作,同时手机中有存在许多我们的隐私信息,伴随使用手机的时间增多,手机中的信息也有可能被暴露,尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…...
【Python_PySide6学习笔记(三十九)】基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格
基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格 基于QLineEdit实现自定义文本框,用于格式化文本,每四个字符后添加一个空格前言1、实现要点1.1 继承和初始化1.2 定义textChanged的槽函数1.3 格式化逻辑1…...
用vs2013做网站/南宁seo推广外包
Google近期宣布针对Google Cloud API的.Net支持。这包括C#绑定和PowerShell cmdlet。还有一个Visual Studio扩展,它允许在Google Compute Engine上浏览Google Cloud 资源和部署Asp.Net 应用。\\针对Google Cloud API的C#绑定\\该C#绑定提供对以下Google Cloud服务的…...
php做网站评价/1688网站
1. 下载当前内核源代码 为什么下载内核源代? 一是便于查看或学习linux内核代码的底层实现方法; 二是便于编写或调试Linux设备驱动程序,因为驱动程序的编译需要内核源代码。 如何选择 如果您要构建一个外部模块(包括正在开发的模块),则只需要…...
用dw做的网站怎么发布/网络游戏推广平台
2019独角兽企业重金招聘Python工程师标准>>> 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的定义及其优缺点 闭包 是指有权访问另一个函数作用域中的变量的函数&#x…...
苏州做网站公/seo系统推广
Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了。这一新特性对以往的操作方法使用没有任何影响,你也可以用新的方式来改造以往的操作方法定义。 …...
wordpress删除评论功能/热门职业培训班
接下来我要分享的这个方法,完全可以颠覆传统的那种引粉丝!这个方法是谁看了,谁都能在10分钟之内就能学会的,而且一次推广之后,有可能 一年 2年三年说的更久一点,就是终身的。也就是说你只需要一次推广,一次…...
网站空间提供/seo推广一年要多少钱
使用VS2015编写驱动时出现的部分错误以及解决方法参考文章: (1)使用VS2015编写驱动时出现的部分错误以及解决方法 (2)https://www.cnblogs.com/Lxk0825/p/10040560.html 备忘一下。...