使用 Lua 发送 GET 请求到网站。

我在使用 Lua 时遇到了麻烦。

我想通过 GET 方法向某个网站发送请求,然后获取来自该网站的响应。

目前我只有以下代码:

local LuaSocket = require("socket")
client = LuaSocket.connect("example.com", 80)
client:send("GET /login.php?login=admin&pass=admin HTTP/1.0\r\n\r\n")
while true do
  s, status, partial = client:receive('*a')
  print(s or partial)
  if status == "closed" then
    break
  end
end
client:close()

我应该怎么做才能从服务器获取响应呢?

我想向该网站发送一些信息,然后获取该页面的结果。

有什么想法吗?

点赞
用户1442917
用户1442917

这种方法可能行不通,因为 *a 会一直读取直到连接关闭,而在这种情况下,客户端不知道该读取多少数据。你需要逐行读取并解析头部信息,以找到 Content-Length,然后在看到两个换行符后读取指定的字节数(即 Content-Length 中设置的字节数)。

socket.http 可以代替你完成全部的操作(读取和解析头部信息、处理重定向、100 继续等等)。可以尝试像以下这样:

local http = require("socket.http")
local body, code, headers, status = http.request("https://www.google.com")
print(code, status, #body)
2014-07-04 17:17:13
用户3805628
用户3805628

我通过传递标头来解决了这个问题

local LuaSocket = require("socket")
client = LuaSocket.connect("example.com", 80)
client:send("GET /login.php?login=admin&pass=admin HTTP/1.0\r\nHost: example.com\r\n\r\n")
while true do
  s, status, partial = client:receive('*a')
  print(s or partial)
  if status == "closed" then
    break
  end
end
client:close()
2014-07-05 19:07:04