zoukankan      html  css  js  c++  java
  • lua cURL使用笔记

    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("
    ---------------------------
    ");
        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("
    ---------------------------
    ");
        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("
    ---------------------------
    ");
        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 ";
        print(
    resultBuff)
        file:write(resultBuff);
      else
        resultBuff = ip.." config NOK
    ";
        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")
  • 相关阅读:
    Entity Framework Extended 批量删除
    EntityFramework.Extended扩展用法
    Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
    C#多线程实现方法——线程池(Thread Pool)
    Entity Framework(code first)数据库初始化
    单表60亿记录等大数据场景的MySQL优化和运维之道
    pt-online-schema-change使用说明、限制与比较
    MySQL online ddl
    mysqldump的流程
    innodb_max_dirty_pages_pct与检查点的关系
  • 原文地址:https://www.cnblogs.com/lightsong/p/3735637.html
Copyright © 2011-2022 走看看