cURL
cURL是 URL命令行工具, 即 command URL, 可以通過命令行模擬各種應用協議的發包, 包括FTP HTTP HTTPS,
官方網站 http://curl.haxx.se/
luacurl
lua curl是基於curl的庫libcurl(http://curl.haxx.se/libcurl/),
針對libcurl開放的API(http://curl.haxx.se/libcurl/c/), 定義lua API對curl基本功能進行封裝。
luauser中列出來3中綁定libcurl的lua封裝庫(http://lua-users.org/wiki/LuaCurl),
其中freepops-luacurl(http://www.freepops.org/en/)實現了libcurl所有的easy 接口 (http://curl.haxx.se/libcurl/c/libcurl-easy.html)
luaforge上提供一個 windows 上可運行luacurl的壓縮包(http://files.luaforge.net/releases/luacurl/freepops-luacurl/0.3.0):
freepops-lua-curl-binary-win32-openssl
本文示例就采用這個windows可運行包。
解壓后, cmd命令行cd到解壓目錄,使用 luaxx.exe yy.lua 接口運行示例腳本。
示例
例子,實現https方式,登錄網站,訪問某個網頁,修改其中參數的功能。其中xx應用時候需要修改。
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")