糖果实验室杂货铺

Candy Lab

LUACURL使用笔记

2 years ago 2

CURL是 URL命令行工具, 即 command URL, 可以通过命令行模拟各种应用协议的发包, 包括FTP HTTP HTTPS,

官方网站

1
http://curl.haxx.se/

luacurl lua curl是基于curl的库libcurl

1
http://curl.haxx.se/libcurl/

针对libcurl开放的API

1
http://curl.haxx.se/libcurl/c/

, 定义lua API对curl基本功能进行封装。

luauser中列出来3中绑定libcurl的lua封装库

1
http://lua-users.org/wiki/LuaCurl

其中freepops-luacurl

1
http://www.freepops.org/en/

实现了libcurl所有的easy 接口

1
http://curl.haxx.se/libcurl/c/libcurl-easy.html

luaforge上提供一个 windows 上可运行luacurl的压缩包

1
http://files.luaforge.net/releases/luacurl/freepops-luacurl/0.3.0
1
freepops-lua-curl-binary-win32-openssl

本文示例就采用这个windows可运行包。

解压后, cmd命令行cd到解压目录,使用 luaxx.exe yy.lua 接口运行示例脚本。

示例 例子,实现https方式,登录网站,访问某个网页,修改其中参数的功能。其中xx应用时候需要修改。

None
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
require("curl")

local ipList = 
{
    "192.168.1.1",
  "192.168.1.1",
}

--登陆
function loginWeb(ip) 
  c = curl.easy_init() 
  c:setopt(curl.OPT_SSL_VERIFYHOST, 0); 
  c:setopt(curl.OPT_SSL_VERIFYPEER, 0); 
  c:setopt(curl.OPT_URL, "https://"..ip.."/") 
   c:setopt(curl.OPT_POSTFIELDS, "Username=admin&Password=admin&Frm_Logintoken=&action=login")

  c:setopt(curl.OPT_WRITEFUNCTION, function(buffer)
    --print(buffer)
     --print("\r\n---------------------------\r\n");
    return #buffer
  end)

   c:perform()
end

--访问页面
function accessPage(ip) 
  c = curl.easy_init() 
  c:setopt(curl.OPT_SSL_VERIFYHOST, 0); 
  c:setopt(curl.OPT_SSL_VERIFYPEER, 0); 
  c:setopt(curl.OPT_URL, "https://"..ip.."/xxpage.html")

  c:setopt(curl.OPT_WRITEFUNCTION, function(buffer)
    --print(buffer)
     --print("\r\n---------------------------\r\n");
    return #buffer
  end)

   c:perform()
end

--设置参数
function setParameter(ip, file) 
  c = curl.easy_init() 
  c:setopt(curl.OPT_SSL_VERIFYHOST, 0); 
  c:setopt(curl.OPT_SSL_VERIFYPEER, 0); 
  c:setopt(curl.OPT_URL, "https://"..ip.."/xx.php") 
  c:setopt(curl.OPT_POSTFIELDS, "DaylightSavingsUsed=1&Dscp=-1")

  local htmlTable = {}
  c:setopt(curl.OPT_WRITEFUNCTION, function(buffer)
    --print(buffer)
     --print("\r\n---------------------------\r\n");
    table.insert(htmlTable, buffer)
    return #buffer
  end)

   c:perform()

  local htmlStr = table.concat(htmlTable);
  local resultBuff = "";
  if string.match(htmlStr, "<result>SUCC</result>") ~= nil then
    resultBuff = ip.." config OK\r\n";
    print(resultBuff)
    file:write(resultBuff);
  else
    resultBuff = ip.." config NOK\r\n";
    print(resultBuff)
   file:write(resultBuff);

 end
end


local file = io.open(".\\result.txt", "w+");
for key,ip in ipairs(ipList) do 
  loginWeb(ip); 
  accessPage(ip); 
  openLightSave(ip, file); 
end
file:close();

print("Done")

作者:LightSong
出处:http://www.cnblogs.com/lightsong/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利


糖果实验室

Openresty中文编程网
IKBC经典机械键盘
机械键盘领券优惠购买

Comments

There are 2 Comments to "LUACURL使用笔记"

  • 糖果 says:
    1 year ago

    @东邪 这是windows版本的执行程序luaxx,来运行lua脚本。luarocks 安装的是用lua直接require进去执行,底层用的是不是这个库的代码,可以自己去看一下代码。

  • 这个和luarocks 安装的luacurl 是啥关系啊?貌似都不能返回http code吧?

Write a Comment