go将青龙面板里面的脚本文件都下载到本地

纯粹练手用的,大家轻喷
青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,F12一下就知道了,青龙面板使用Request Headers里面放入Authorization,那么Token我们已经拿到了,然后获取到所有文件的名称,分级目录,太过于简单,直接上代码了

go将青龙面板里面的脚本文件都下载到本地
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "os"
    "strconv"
    "strings"
    "time"
)

func main() {

    recordbody := getData("http://yourIp:5600/api/scripts/files?t=")

    var conf recordConfig
    err := json.Unmarshal(recordbody, &conf)
    if err != nil {
        fmt.Println("error:", err)
    }

    fmt.Printf("\r\n获取到的body code:%s \n", strconv.Itoa(conf.Code))
    for _, val := range conf.Data {
        if val.Children != nil {
            for _, childval := range val.Children {
                childbody := getData(fmt.Sprintf("http://yourIp:5600/api/scripts/%s?path=%s&t=", childval.Value, childval.Parent))
                var jsconf jsConfig
                err := json.Unmarshal(childbody, &jsconf)
                if err != nil {
                    fmt.Println("error:", err)
                }

                downloadFile(strings.NewReader(string(jsconf.Data)), childval.Parent, childval.Value)
            }
        } else {
            childbody := getData(fmt.Sprintf("http://yourIp:5600/api/scripts/%s?t=", val.Value))
            var jsconf jsConfig
            err := json.Unmarshal(childbody, &jsconf)
            if err != nil {
                fmt.Println("error:", err)
            }

            downloadFile(strings.NewReader(string(jsconf.Data)), "", val.Value)
        }
    }
    fmt.Println("执行完毕")
}
func getData(urlstr string) []byte {
    times := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
    var bt bytes.Buffer
    bt.WriteString(urlstr)
    bt.WriteString(times)
    fmt.Printf(bt.String())
    fmt.Printf("\n")
    client := &http.Client{}
    req, _ := http.NewRequest("GET", bt.String(), nil)
    req.Header.Add("Authorization", "Bearer yourToken")
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    body, _ := ioutil.ReadAll(resp.Body)
    return body
}
func downloadFile(body io.Reader, path string, name string) {
    filepath := fmt.Sprintf("./%s", name)
    // Create output file
    if path != "" {
        if _, err := os.Stat(path); os.IsNotExist(err) {
            // 必须分成两步:先创建文件夹、再修改权限
            os.Mkdir(path, 0777) //0777也可以os.ModePerm
            os.Chmod(path, 0777)
        }
        filepath = fmt.Sprintf("./%s/%s", path, name)
    }
    out, err := os.Create(filepath)
    if err != nil {
        panic(err)
    }
    defer out.Close()
    // copy stream
    _, err = io.Copy(out, body)
    if err != nil {
        panic(err)
    }
}

type jsConfig struct {
    Code int json:"code"

    Data string json:"data"
}

type recordConfig struct {
    Code int json:"code"

    Data []bodymsg json:"data"
}
type bodymsg struct {
    Disabled bool json:"disabled"

    Key string json:"key"

    Mtime float32 json:"mtime"

    Title string json:"title"

    Value string json:"value"

    Children []bodymsgchildren json:"children"
}

type bodymsgchildren struct {
    Key string json:"key"

    Mtime float32 json:"mtime"

    Title  string json:"title"
    Value  string json:"value"
    Parent string json:"parent"
}

Original: https://www.cnblogs.com/spatxos/p/15614177.html
Author: spatxos
Title: go将青龙面板里面的脚本文件都下载到本地

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582916/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Windows下配置Redis多实例

    方法一:新建目录创建Redis实例 1.将你的redis安装目录复制一份,命名为Redis6380 2.用命令行CMD工具进入到该目录下 3.执行创建redis6380服务的命令:…

    Linux 2023年5月28日
    082
  • zookeeper与kafka集群部署实现

    安装java依赖环境 配置zookeeper 启动zookeeper 检查状态 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目…

    Linux 2023年6月7日
    0190
  • Linux 下 SVN 的安装和配置

    SVN 是一个自由开源的版本管理系统,它可以按照时间的顺序去管理文件、目录以及对其进行的修改。于今,它被广泛的用于互联网公司的项目版本管理中 工作原理 它的工作原理如下图所示 它是…

    Linux 2023年6月13日
    098
  • mycat数据库集群系列之mycat读写分离安装配置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大概包括以下内容:多数据库安装、mycat部署安…

    Linux 2023年6月14日
    0129
  • Redis的数据时如何避免丢失的?

    Redis之所以足够快,一部分的原因是它的数据都是基于内存存储的。虽然Redis更多的是作为一个旁路缓存【先在redis中查询,查询不到数据的时候,在查询持久化数据库】来使用。如果…

    Linux 2023年6月7日
    076
  • Supervisor进程管理

    Supervisor 介绍 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它…

    Linux 2023年6月8日
    0117
  • MySQL SUBSTRING_INDEX截取字符串

    一、SUBSTRING_INDEX 二、示例 Original: https://www.cnblogs.com/woods1815/p/16368248.htmlAuthor: …

    Linux 2023年6月13日
    080
  • JavaScript DOM操作(二)

    上机二 JavaScript DOM操作 目的: 熟练掌握JavaScript的文档对象模型DOM概念,以及各种节点类型和节点操作。 重点掌握元素节点的各种操作方法。 要求: 实现…

    Linux 2023年6月13日
    0101
  • ACP 知识点总结

    记录下学习ACP过程不断遇到的且需要记录的知识点: 在阿里云专有网络VPC创建之后,路由器也是随着VPC一起自动创建,所以不需要手动创建,这个时候需要继续创建交换机才能在交换机种创…

    Linux 2023年6月14日
    090
  • 分布式数据库

    目录: 1.分布式数据库的核心功能 2.分布式数据库的优点 3.分布式数据库的缺点 4.市面上分布式数据库的产品分类 5.分布式数据库的搭建 随着互联网的发展,人类社会的数据量迅速…

    Linux 2023年6月6日
    066
  • [Python]批量替换PPT字体脚本

    使用说明 脚本代码 配置文件 使用说明 将脚本放置在需要批量修改的PPT文件夹根目录 修改配置文件 conf.ini 中的字体 执行脚本文件 ​ exe文件 下载:https://…

    Linux 2023年6月13日
    0118
  • linux常用指令记录

    给目标文件夹执行权限:chmod -R 777 html du -sh . [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进…

    Linux 2023年6月6日
    0118
  • nginx禁止直接ip、未配置域名访问配置

    问题背景 最近偶然对线上域名配置的nginx IP进行直接访问后,发现http居然是可以通的,而https直接IP访问浏览器会报证书不安全的提示,点击详细查看发现是固定返回了ngi…

    Linux 2023年6月6日
    0211
  • Fastadmin前台Getshell漏洞复现

    Fastadmin前台Getshell漏洞复现 一、简介 FastAdmin是一款基于ThinkPHP5+Bootstrap开发的极速后台开发框架。FastAdmin基于Apach…

    Linux 2023年5月28日
    0119
  • 【PHP】浅谈php实现订阅发布模式及redis的实现

    订阅发布应用场景: 1、广告推送 2、游戏公告 3、广播–短信、邮件 4、跨应用推送–使用同一个redis实例,net发布publish,php常驻内存订阅subscribe处…

    Linux 2023年5月28日
    080
  • linux下应用程序界面初始位置及鼠标拖动失效

    故事背景:最近在适配uos系统,客户端程序启动初始位置乱跳,并不是我设置的屏幕中间,鼠标拖动失效,一度怀疑自己的代码有问题,开始我们的探险之路吧。。。 探索之路:后来goolge发…

    Linux 2023年6月13日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球