标签: luasocket

lua中的https请求

我正在尝试使用lua脚本在启用SSL的服务器上检索页面.需要注意的是,服务器具有自签名证书.由受信任的CA颁发的证书没有问题.

local https = require("socket.http")
local resp = {}
local r, c, h, s = https.request{
    url = "https://my-server:443/example.php",
    sink = ltn12.sink.table(resp),
    protocol = "tlsv1"
}
Run Code Online (Sandbox Code Playgroud)

服务器返回:

错误请求您的浏览器发送了此服务器无法理解的请求.原因:您正在向支持SSL的服务器端口说明HTTP.请使用HTTPS方案访问此URL.

在服务器端,该请求在Apache ssl_access.log中生成此条目

192.168.0.150 - - [27/Nov/2011:16:32:07 +0100] "GET /" 400 529 "-" "-"
Run Code Online (Sandbox Code Playgroud)

此外,tcpdump显示在SYN-ACK握手之后,没有SSL 257 Client Hello发送.使用我的浏览器或wget使用相同的URL工作正常.

lua luasocket

13
推荐指数
2
解决办法
3万
查看次数

Lua套接字异步调用

我正在编写一个使用Lua套接字与http服务器通信的程序.我使用的API是"socket.http.request",我发现它是同步的.我的理解是,它等待它得到一些响应或超时.我的理解是否正确?如果是这样,我宁愿使用异步API.

我还发现了另一个API"socket.http.request_cb",它在处理请求时调用了一个回调函数.但是,它似乎不适用于此.(这个API在我正在使用的版本上不可用.)我在这里使用Lua 5.1和Lua socket 2.0.2.谁能让我知道哪个版本的Lua或Lua套接字有这个API?

lua luasocket

11
推荐指数
1
解决办法
1万
查看次数

如何使用Luaocket 3使用Lua 5.2

我正在尝试编译我在GitHub上使用lua 5.2找到的luasocket 3.问题是,我不知道如何结合在一起使用.我是否需要编译为DLL然后引用代码中的某个地方,或者我应该从lua控制台调用它?Lualuasocketluasocketlua

windows lua luasocket lua-5.2

9
推荐指数
1
解决办法
4995
查看次数

安装Lua套接字库

无论是我过度还是失明.我想学习与Lua的网络,因此我必须安装socketlib,所以我可以轻松地要求它,但我不知道,我应该"需要"哪些文件.这个例子说:

local socket = require("socket")
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我不知道我应该包含哪些文件,如果我使用socket.lua它不起作用我得到:No files found.

我从这里得到了lib:Lua套接字下载

或者,是否有另一种方法来安装套接字lib?

sockets lua luasocket

8
推荐指数
1
解决办法
2万
查看次数

lua http套接字超时

LuaSocket HTTP模块文档说可以在HTTP连接上设置超时:

可以设置以下常量来控制HTTP模块的默认行为:

PORT:用于连接的默认端口; PROXY:用于连接的默认代理; TIMEOUT:设置所有I/O操作的超时; USERAGENT:向服务器报告的默认用户代理. http://w3.impa.br/~diego/software/luasocket/http.htm

如何在lua脚本中设置这些常量?

sockets lua luasocket

7
推荐指数
2
解决办法
7235
查看次数

"模块'socket.http'未找到:" - 管理iMac上的

当我在终端中运行我的代码时,我收到此错误/消息:

module 'socket.http' not found: 
    no field package.preload['socket.http'] 
    no file '/usr/local/share/lua/5.2/socket/http.lua' 
    no file '/usr/local/share/lua/5.2/socket/http/init.lua' 
    no file '/usr/local/lib/lua/5.2/socket/http.lua' 
    no file '/usr/local/lib/lua/5.2/socket/http/init.lua' 
    no file './socket/http.lua' 
    no file '/usr/local/lib/lua/5.2/socket/http.so' 
    no file '/usr/local/lib/lua/5.2/loadall.so' 
    no file './socket/http.so' 
    no file '/usr/local/lib/lua/5.2/socket.so' 
    no file '/usr/local/lib/lua/5.2/loadall.so' 
    no file './socket.so'
Run Code Online (Sandbox Code Playgroud)

一些消息来源让我调查LuaSocket,但我仍然不知道该做什么或如何安装它.

sockets macos lua luasocket

7
推荐指数
1
解决办法
1万
查看次数

LuaLanes和LuaSockets

我正在研究一个小的Lua应用程序(在Lua for Windows下,如果这很重要),它使用套接字与外界进行通信.(LuaSocket)

而我正试图并行提出几个请求.所以我认为LuaLanes是要走的路.(当然,如果有更好的解决方案,我会接受替代方案,但我不愿意为此处理协程.)

像这样的东西:

server = assert (socket.bind ('*', 1234))
client = server : accept ()
-- set id to some unique value
allClients [id] = client
theLane = lanes.gen ("", laneTest) ( id )
print (theLane [1])
Run Code Online (Sandbox Code Playgroud)

laneTest函数的定义如下:

function laneTest (id)
    local client = allClients [id]
    print ('peer: ', client:getpeername())
end
Run Code Online (Sandbox Code Playgroud)

我的问题是在laneTest函数内部,当作为一个通道运行时,我收到这个可爱的错误信息:

尝试索引本地"客户端"(userdata值)

(从线client:getpeername())

所以..我不确定这里发生了什么?车道与插座不兼容,还是我做错了什么?

我想这可能是因为车道附带的版本和Lua的Windows是古(luaforwindows),不与插座的工作,但最新的版本可能?(车道2.0.4对比最近的3.xx)

我真的不知道怎么去更新我所拥有的Lanes版本,否则我现在就试过了,所以.我很感激任何建议,如果那是我可以前进的地方,或者有更明显的事情,我做错了.

编辑:我继续通过luarocks安装车道,并使用安装为摇滚的车道3.1.6-1也有同样的问题.

编辑2:试过这个(但仍然失败):

require ('socket')
require ('lanes')
local allClients = {}

function …
Run Code Online (Sandbox Code Playgroud)

lua luasocket lua-lanes

6
推荐指数
2
解决办法
3200
查看次数

使用luarocks安装luasocket

我按照可用的说明在我的windows xp(32位)系统中安装了luarocks

http://luarocks.org/en/Installation_instructions_for_Windows

从luarocks安装luasocket我在命令提示符下使用了命令"luarocks install luasocket".但结果却出现了错误:

**Warning: Failed searching manifest: Failed loading manifest: Failed fetching man
ifest for http://luarocks.org/repositories/rocks - Error fetching file: Failed d
ownloading http://luarocks.org/repositories/rocks/manifest
Error: No results matching query were found.**
Run Code Online (Sandbox Code Playgroud)

所以它无法找到luasocket.rock文件.我从链接下载了文件luasocket-2.0.2-5.src.rock:

http://luarocks.org/repositories/rocks/

现在我尝试使用命令luarocks install luarocks install"C:\ Documents and Settings\Ankur_Gupta37\Desktop\LuaRocks\2.1\lua\luarocks"安装此.rock文件

(我把luasocket-2.0.2-5.src.rock放在"C:\ Documents and Settings\Ankur_Gupta37\Desktop\LuaRocks\2.1\lua\luarocks\luasocket-2.0.2-5.src.rock"这个位置)

但最后又出现了一个错误:

**set INCLUDE=C:/Documents and Settings/Ankur_Gupta37/Desktop/LuaRocks/2.1/include
;%INCLUDE% &set LIB=C:/Documents and Settings/Ankur_Gupta37/Desktop/LuaRocks/2.1
;%LIB% &msbuild /p:"VCBuildAdditionalOptions= /useenv" luasocket.sln &mkdir mime
 & mkdir socket &cp src/mime.dll mime/core.dll &cp src/socket.dll …
Run Code Online (Sandbox Code Playgroud)

lua luasocket luarocks

6
推荐指数
1
解决办法
7237
查看次数

Luasocket + nginx错误 - lua条目线程中止:运行时错误:尝试跨越C调用边界

当我使用以下脚本时:

local smtp = require("socket.smtp")
local from = "from@host"
local rcpt = "rcpt@host"
local msg = {
  headers = {
    to = rcpt,
    subject = "Hi"
  },
  body = "Hello"
}
smtp.send{from = from,rcpt = rcpt,source = smtp.message(msg)}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:lua entry thread aborted: runtime error: attempt to yield across C-call boundary.

我正在使用Lua 5.1 的最新luasocket安装,luarocks使用与LuaJIT 2.1编译的nginx.是什么导致此错误消息,我该如何解决?

lua nginx luasocket luajit luarocks

6
推荐指数
1
解决办法
2554
查看次数

udp 客户端在接收来自服务器的消息时发送 ICMP“端口不可达”

移动:https://superuser.com/questions/782549/udp-client-sending-icmp-port-unreachable-when-receiveing-messages-from-the-ser

我有一个使用 luasocket 的 udp 客户端,基本上是这样做的(有几个抽象层,但这就是那里发生的事情):

s=socket.udp()
s:setsockname("*",0)
s:setpeername(socket.dns.toip("example.com"),64299)
s:settimeout(0)
s:send(...)
s:settimeout(10)
msg,err=s:receive()
s:settimeout(0)
print(msg,err)
Run Code Online (Sandbox Code Playgroud)

虽然在服务器的调试输出中看到一切正常(ssh 到远程主机),但我在客户端中收到“超时”错误。

当使用客户端wireshark检查所有内容时,我看到客户端发送的数据包,以及来自服务器的响应数据包(正确的端口和所有内容),以及从我的客户端主机发送到服务器的ICMP“端口不可达”数据包,以响应这是(正确的)回应。

那里发生了什么事?我尝试了所有方法,包括将 iptables 重置为“接受所有内容”,但我的客户端仍然发送“端口无法访问”。

相关数据包是:

From            To                  Len Description
192.168.2.100   95.143.172.171  UDP 61  Source port: 45025  Destination port: 64299
  000e8f11e7000025229835a908004500002f4008400040112b6fc0a802645f8facabafe1fb2b001b28d794d2000ec8360100aa81a477616e74a3756964
95.143.172.171  192.168.2.100   UDP 60  Source port: 64299  Destination port: 45025
  0025229835a9000e8f11e70008004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff000000
192.168.2.100   95.143.172.171  ICMP 85 Destination unreachable (Port unreachable)
  000e8f11e7000025229835a9080045c00047061d00004001a492c0a802645f8facab0303cc6c000000004500002b000040003911727b5f8facabc0a80264fb2bafe100172e8d94d2000e0ea10100a681a3756964ff
Run Code Online (Sandbox Code Playgroud)

防火墙,以防万一它很重要(我认为这并不重要,因为 iptables 在发生这种情况时不会增加任何 INPUT 数据包计数器):

$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo …
Run Code Online (Sandbox Code Playgroud)

sockets networking udp luasocket icmp

5
推荐指数
1
解决办法
3万
查看次数

标签 统计

luasocket ×10

lua ×9

sockets ×4

luarocks ×2

icmp ×1

lua-5.2 ×1

lua-lanes ×1

luajit ×1

macos ×1

networking ×1

nginx ×1

udp ×1

windows ×1