使用lua模拟登录

使用lua模拟登录,lua,http-post,luasocket,Lua,Http Post,Luasocket,我们的应用程序需要使用Lua从网站获取一些数据,但网站需要身份验证(如google的登录方法) 我试图使用LuaSocket库,但是我找不到完整的代码示例,所以我只知道我需要做什么 我知道http.request()还有第二个可选参数,允许我发送POST数据,我还可以使用完整的语法指定POST方法和要发送的数据,但我不知道数据应该是什么格式,应该是什么样子。桌子一串什么 我也知道我还需要设置内容类型和内容长度,但我不知道这些值应该是什么,也不知道如何找到它们。我不知道有什么选择,写什么 谁能帮帮

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

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

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

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

谁能帮帮我吗。给我一个使用lua的谷歌登录的完整示例


我们将非常感谢您的帮助。非常感谢。

如果网站不使用HTTP基本身份验证,而是使用HTML表单对用户进行身份验证,而您无法访问网站开发人员,那么了解情况的最佳方法就是查看浏览器的功能

启动Firebug或Google Chrome开发工具,或一些HTTP调试代理

在浏览器中打开站点,登录,然后查看浏览器执行了哪些请求,以及站点的回复。您必须在程序中模拟相同的请求

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

至于在web上搜索示例的格式,有几个

更新:好的,下面是一个例子

请注意,示例中使用的URL将很快过期。只需在上创建自己的。在浏览器中打开以查看程序发送的数据。请勿向此服务发送真实登录名和密码

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")
预期产出:

Status: OK HTTP code: 200 Response headers: date : Sat, 23 Jun 2012 07:49:13 GMT content-type : text/html; charset=utf-8 connection : Close content-length : 3 Response body: ok Done dumping response 状态:OK HTTP代码:200 响应标题: 日期:2012年6月23日星期六格林尼治标准时间07:49:13 内容类型:text/html;字符集=utf-8 连接:关闭 内容长度:3 答复机构: 好啊 完成倾销回应
到目前为止你试过什么?请检查一些其他问题,谢谢您的评论。我知道该网站使用web表单对用户进行身份验证,并且我有访问该网站的帐户。所以,我该怎么办,我在谷歌上搜索了一下,但在lua中没有找到任何样本。您知道您必须发送哪些数据吗?另外,请注意,如果该网站使用HTTPS,您就不能使用
luasocket
,您必须使用
luasec
(它具有兼容的API)。t无论如何,您的代码都需要存储。但是我使用Fiddler来捕获我想要访问的站点的会话,并且我发现请求主体几乎没有可变参数,这样地:
ppui\u logintime=14084&charset=UTF-8&code字符串=&token=9fcf00d59b6b9860937a70c22195d818&isPhone=false&index=0&u=http%3A%2F%2Fwww.baidu.com%2F&safeflg=0&staticpage=https%3A%2F%2Fpassport.baidu.com%2Fv2Jump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login.\postCallback&username=test&password=test&password=test&frey=0&mem>ppui_登录时间和令牌字段值,它们从何处获取?他们通常做什么?我担心你必须通过更密切地观察流量来弄清楚这一点——或者创建一个单独的问题,详细说明你试图登录的网站的信息,可能有人已经尝试了做你想做的事情。