使用 LuA 进行模拟登录



我们的应用程序需要使用Lua从网站获取一些数据。但是该网站需要身份验证(如谷歌的登录方法)。

我正在尝试使用 LuaSocket 库,但我找不到完整的代码示例,所以我只知道我需要做什么。

我知道 http.request() 还有第二个可选参数,它允许我发送 POST 数据,并且我还可以使用完整的语法来指定 POST 方法和要发送的数据,但我不知道数据应该采用什么格式,以及它应该是什么样子。桌子?字符串?什么?

我也知道我还需要设置内容类型和内容长度 - 但我不知道这些值应该是什么,也不知道如何找到它们。我不知道什么选择和什么写作。

有人可以帮助我。给我一个完整的示例 使用 lua 在谷歌登录?

任何帮助将不胜感激。非常感谢。

如果网站不使用HTTP基本身份验证,而是使用HTML表单来修饰用户,并且您无法访问网站开发人员,那么弄清楚发生了什么的最好方法是偷看浏览器的功能。

启动您的Firebug或Google Chrome开发人员工具,或一些HTTP调试代理。

在浏览器中打开网站,登录,然后查看浏览器做了哪些请求,以及网站的回复是什么。您必须在程序中模仿相同的请求。

请注意,网站很可能会要求您在后续请求中发送会话信息以保持身份验证。它可能是一个(或几个)和/或一个GET参数。再次,看看浏览器做了什么并模仿了什么。

至于格式——在网上搜索示例,有几个。

更新:好的,这里有一个例子。

请注意,示例中使用的 URL 将很快过期。只需在 http://requestb.in/创建自己的即可。在浏览器中打开 http://requestb.in/vbpkxivb?inspect 以查看程序发送的数据。不要向此服务发送真实的登录名和密码!

require 'socket.http'
local request_body = [[login=user&password=123]]
local response_body = { }
local res, code, response_headers = socket.http.request
{
  url = "http://requestb.in/vbpkxivb";
  method = "POST";
  headers = 
  {
    ["Content-Type"] = "application/x-www-form-urlencoded";
    ["Content-Length"] = #request_body;
  };
  source = ltn12.source.string(request_body);
  sink = ltn12.sink.table(response_body);
}
print("Status:", res and "OK" or "FAILED")
print("HTTP code:", code)
print("Response headers:")
if type(response_headers) == "table" then
  for k, v in pairs(response_headers) do
    print(k, ":", v)
  end
else
  -- Would be nil, if there is an error
  print("Not a table:", type(response_headers))
end
print("Response body:")
if type(response_body) == "table" then
  print(table.concat(response_body))
else
  -- Would be nil, if there is an error
  print("Not a table:", type(response_body))
end
print("Done dumping response")

预期产出:

状态:正常HTTP代码:200响应标头:日期 : 周六, 23 六月 2012 07:49:13 GMT内容类型:文本/html;字符集=UTF-8连接 : 关闭内容长度 : 3响应正文:还行完成倾销响应

最新更新