Lua socket.http在示例脚本中可以正常加载,但无法从第三方主机加载。
2013-9-23 8:50:21
收藏:0
阅读:166
评论:2
我正在编写一个 Lua 脚本,将由第三方程序(一些 .exe 将调用我的脚本中的特定函数)托管。为了实现我需要的功能(调用 REST 服务以检索特定信息),我想使用 socket.http.request。
我首先编写了一个调用我想要发起的请求的示例脚本:
local io = require("io")
local http = require("socket.http")
local ltn12 = require("ltn12")
local data = "some data")
local response = {}
socket.http.request({
method = "POST",
url = "http://localhost:8080/someServce/rest/commands/someCommand",
headers = {
["Content-Type"] = "application/x-www-form-urlencoded",
["Content-Length"] = string.len(data)
},
source = ltn12.source.string(data),
sink = ltn12.sink.table(response)
})
print(table.concat(response))
print("Done")
这个脚本可以正常工作。我得到了我期望的响应。 现在当我从第三方主机尝试执行此操作时,我首先遇到了一个错误:
module 'socket.http' not found:
no field package.preload['socket.http']
no file '.\socket\http.lua'
no file 'D:\SomeFolder\lua\socket\http.lua'
no file 'D:\SomeFolder\lua\socket\http\init.lua'
no file 'D:\SomeFolder\socket\http.lua'
no file 'D:\SomeFolder\socket\http\init.lua'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\http.luac'
no file '.\socket\http.dll'
no file 'D:\SomeFolder\socket\http.dll'
no file 'D:\SomeFolder\loadall.dll'
no file '.\socket.dll'
no file 'D:\SomeFolder\socket.dll'
no file 'D:\SomeFolder\loadall.dll'
我尝试将 LUA 文件夹中的套接字文件夹复制到主机正在执行的文件夹(D:\SomeFolder)。然后它找到了该模块,但是加载了另一个错误:
loop or previous error loading module 'socket.http'
我还尝试将 require 语句移到函数之外并使其成为全局的。这给了我另一个错误:
module 'socket.core' not found:
no field package.preload['socket.core']
no file '.\socket\core.lua'
no file 'D:\SomeFolder\lua\socket\core.lua'
no file 'D:\SomeFolder\lua\socket\core\init.lua'
no file 'D:\SomeFolder\socket\core.lua'
no file 'D:\SomeFolder\socket\core\init.lua'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.luac'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket\core.lua'
no file '.\socket\core.dll'
no file 'D:\SomeFolder\socket\core.dll'
no file 'D:\SomeFolder\loadall.dll'
no file '.\socket.dll'
no file 'D:\SomeFolder\socket.dll'
no file 'D:\SomeFolder\loadall.dll'
然后,我尝试将 core.dll 从套接字中复制到 D:\SomeFolder 文件夹中,它给了我另一个错误:
error loading module 'socket.core' from file '.\socket\core.dll':
%1 is not a valid Win32 application.
现在我卡住了。我认为我肯定做错了什么,但我找不到任何有关如何解决此类问题的适当描述。有人能帮助我吗?
点赞
用户81912
将下面翻译成中文并且保留原本的 markdown 格式
事实证明,在这里问题出在Lua实际查找的路径上。和第三方一起,我们发现只要我们将一组库放在D:\SomeFolder\中,就可以使一切正常。因此,例如,在D:\SomeFolder\中现在有一个socket.lua,还有一个socket和一个mime文件夹。
一个经验规则是,应用程序所绑定的lua5.1.dll的位置引导了您想要加载的任何模块的位置。
2013-09-30 06:51:46
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可能需要按照以下文件夹结构(相对于
D:\SomeFolder文件夹):socket.lua socket/core.dll socket/http.lua socket/url.lua socket/<socket 文件夹中 http.lua 需要的任何其他文件>我刚刚测试了这个配置,它对我有效。
这通常是由于从
socket/http.lua文件本身加载socket.http引起的。