【问题标题】:Send Get to website with lua使用 lua 发送到网站
【发布时间】:2014-08-25 20:44:38
【问题描述】:

我在使用 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()

我应该怎么做才能得到服务器的响应?

我想向这个网站发送一些信息并获取页面结果。

有什么想法吗?

【问题讨论】:

  • print(s or partial) 返回什么?如果它打印 nil,那么你的连接没有建立。否则,s 包含来自服务器的响应(包括标头信息)。

标签: lua luasocket


【解决方案1】:

这可能不起作用,因为*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)

【讨论】:

    【解决方案2】:

    我解决了传递标题的问题

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2017-03-09
      • 2013-12-25
      • 1970-01-01
      • 2023-03-14
      • 2011-06-23
      相关资源
      最近更新 更多