我已经使用Lua好几个月了,我觉得这是一种非常糟糕的语言,不容易解决常见的问题。我正在使用Debian 11,我看到我已经安装了lua,如下所示:
$ lua
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio因此,现在我将继续尝试从ipify.org运行一段简单的代码来获取我的公网IP:
我创建了一个名为ip.lua的文件,其中包含我从ipify.org获得的以下内容,如何使用lua调用它:
http.Fetch("https://api.ipify.org", function(body) print("My ip is: " .. body ) end然后我chmod +x ip.lua
现在,我使用以下命令运行它:
lua ip.lua我得到了以下错误:
lua: ip.lua:2: ')' expected (to close '(' at line 1) near <eof>我不知道这是什么意思。我的目标是使用ipify.org从我的计算机上获取公网IP。这个人有一个这个here的示例代码
因此,我使用以下代码(我希望复制和粘贴以下代码可以正常工作):
local url = require "socket.url"
local http = require "socket.http"
print("----------EXTERNAL IP DIRECT---------------")
local result, status = http.request("http://api.ipify.org/")
print(result, status)
print("---------EXTERNAL IP VIA PROXY-------------")
http.PROXY="http://192.168.102.134:8888/" -- locally hosted http proxy, no name/password
local result1, status1 = http.request("http://api.ipify.org/")
print(result1, status1)但我得到了以下错误:
lua: ./socket.lua:12: module 'socket.core' not found:
no field package.preload['socket.core']
no file '/usr/local/share/lua/5.3/socket/core.lua'
no file '/usr/local/share/lua/5.3/socket/core/init.lua'
no file '/usr/local/lib/lua/5.3/socket/core.lua'
no file '/usr/local/lib/lua/5.3/socket/core/init.lua'
no file './socket/core.lua'
no file './socket/core/init.lua'
no file '/usr/local/lib/lua/5.3/socket/core.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './socket/core.so'
no file '/usr/local/lib/lua/5.3/socket.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './socket.so'
stack traceback:
[C]: in function 'require'
./socket.lua:12: in main chunk
[C]: in function 'require'
./socket/url.lua:13: in main chunk
[C]: in function 'require'
ip.lua:1: in main chunk
[C]: in ?当然,我搜索了一下这个错误,结果显示我需要安装luasocket。因此,我做了以下工作:
apt -y install luarocks
luarocks install luasocket然后重新运行上面的代码,我仍然得到相同的错误。那么,如何在lua中运行一个简单的curl呢?
更令人沮丧的是,我还试图安装这个curl库,以便调用simple curl:
luarocks install Lua-cURL
Installing https://luarocks.org/lua-curl-0.3.13-1.src.rock并得到以下错误:
Error: Could not find header file for CURL
No file curl/curl.h in /usr/local/include
No file curl/curl.h in /usr/include
You may have to install CURL in your system and/or pass CURL_DIR or CURL_INCDIR to the luarocks command.
Example: luarocks install lua-curl CURL_DIR=/usr/local我已经在/usr/bin/curl中安装了curl,但它找不到它。因此,我按照它所说的来解决这个问题:
luarocks install Lua-cURL CURL_DIR=/usr/local但是我还是得到了同样的错误。您将如何使用lua从ipify.org运行简单的应用程序接口?
发布于 2021-09-26 21:54:04
这真的是一个多个问题,但我会尽我所能回答。
lua: ip.lua:2: ')' expected (to close '(' at line 1) near <eof>
<eof>的意思是文件结束,所以这意味着你有一个开括号,解析器没有看到结束括号就到达了文件的末尾。查看代码,我发现http.Fetch调用缺少右括号。
我不知道luasocket库是怎么回事。我查看了它的源代码,但在任何地方都找不到core模块,所以我猜它一定是luasocket中的一个bug。它的luarocks页面显示了最新版本作为2年前的候选版本,所以可能他们没有很好地维护它。
至于curl问题,您已经安装了curl可执行文件,但是lua-curl需要一个头文件。Debian倾向于将头文件与二进制文件和库分开打包,这可能会导致依赖地狱。在运行apt search libcurl | less之后,我对您需要的包的最好猜测是libcurl4-openssl-dev。试试sudo apt install libcurl4-openssl-dev。
编辑:我搜索了curl/curl.h,找到了this article,它显示的是libcurl4-nss-dev而不是openssl版本。
EDIT2:我在Debian包中搜索"curl/curl.h“,得到了this result,它显示了头文件的实际安装位置。假设你使用的是x86_64,你可以尝试这个命令或者它的一些变体:
luarocks install lua-curl CURL_INCDIR=/usr/include/x86_64-linux-gnu我给你的这些命令是未经测试的,因为我不想安装所有这些东西。
https://stackoverflow.com/questions/69338762
复制相似问题