使用标准 LUA API 获取 URL
2019-7-20 6:2:7
收藏:0
阅读:145
评论:2
我想使用 LUA 标准 API 发送 http 请求
我尝试使用 socket.http,但是不起作用,我正在使用的 LUA 框架(我是 X-Plane 飞行模拟器的插件开发人员)不允许我这样做。我只能使用 LUA API。
url = 在这里声明url
io.open(url)
我期望此代码可以获取 URL 中的文件
点赞
用户571994
这句话 "我期望该代码将文件获取到 URL 中" 令人困惑。
我猜想你的意思是 "我期望该代码将 URL 中的内容/文件/文本获取到本地文件中",并在这样的理解下继续 ...
你的 Lua 代码有几个问题
'-k".."' 会变成 "-khttp",这是一个错误(你需要在 "-k" 后面加一个空格)。
你没有 读取 结果。 "io.popen"(当成功时)会将命令作为子进程运行,并将文本作为 Lua 文件返回(命名为 "file" ... 使用像 "curl_results" 这样的变量名更加描述性 ... "file" 在许多语言中通常是一个保留字,会使某些读者感到困惑)。
因此,你需要(在成功的 popen 后):s = file:read ("*a"),这将整个结果读到字符串 's' 中。
这是一个可运行的示例,可以通过 ipify.org 的服务获取你的外部/全局/WAN IP 地址:
-- myip.lua
-- 以下代码通过 api.ipify.org 的免费服务获取我们的外部(也称为“全局”或“WAN”)IP地址(如果你加载该页面,则返回你的IP地址(没有换行符))
--
-- 成功:found_data 非 nil,my_ip 有字符串
-- 失败:found_data 为 nil,my_ip 为 nil
--
-- 说明:
-- "-s" 表示 "silent"
-- "-k" 表示 "insecure"(例如忽略任何关于安全证书的问题)
--
-- 变量:
-- locals: curl_data
-- globals: found_data, my_ip
-- 初始化默认结果(nil 表示失败)
found_data = nil -- 将为 nil 或 1
my_ip = nil -- 将为 nil 或类似于 "192.1.2.3" 的内容
-- 使用 curl 读取 api.ipify.org ...
local curl_data = io.popen("curl -s -k http://api.ipify.org")
if curl_data then -- io.popen 工作正常。
found_data = 1 -- 文件已找到(我通常使用 'true'(并执行:true = 1))。
my_ip = curl_data:read("*a") -- 将整个文件读入 my_ip 字符串中。
if (not my_ip) or (#my_ip == 0) then
my_ip = nil -- 以防它是一个空字符串。
found_data = nil -- 空结果表示我们没有得到任何数据。
end
io.close(curl_data) -- 关闭文件(管道)。
curl_data = nil -- (为了防止它不是全局变量,请删除旧数据)。
-- 注意:我们没有验证结果是否像 IP 地址。
-- print(my_ip) -- 删除注释以进行调试/演示。
else
found_data = nil -- 没有找到文件。
print ("no found")
end
-- found_data 应该为 1(my_ip 有 "#.#.#.#"),或
-- found_data 和 my_ip 都将是 nil。
if found_data then
print("我的 IP 地址(对于世界)是:" .. my_ip)
else
print("无法找到我的(外部)IP地址")
end
这是一个示例:
lua myip.lua
我的 IP 地址(对于世界)是:16.22.84.45
2022-03-21 23:09:16
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

这可能是个好主意,但是不幸的是它行不通。也许我在语法方面遗漏了一些东西。
local file = io.popen("curl -s -k".."https://myurl/myfile") if file then io.close(file) is_file = 1 -- 文件找到 else is_file = 0 -- 文件未找到 end即使在/myurl/中没有任何内容,它仍然说找到了文件。