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)

大家都在看

  • NoteOfMySQL-12-备份与还原

    一、备份概述 备份不是单纯的复制数据,因为这样无法留下历史记录和系统的DNS或Registry等信息。完整的备份应包括自动化的数据管理与系统的全面恢复,即备份=复制+管理。 1. …

    Linux 2023年6月14日
    064
  • 微服务网关Gateway实践总结

    有多少请求,被网关截胡; 一、Gateway简介 微服务架构中,网关服务通常提供动态路由,以及流量控制与请求识别等核心能力,在之前的篇幅中有说过Zuul组件的使用流程,但是当下Ga…

    Linux 2023年6月14日
    091
  • 如何搭建android源代码repo仓库

    .版本: v0.3作者:河东西望日期:2022-7-5. 如果你的开发是基于AOSP源码来建仓,那么搭建repo服务器和部署自己的repo仓库就是非常必要的工作了。 现实中很多公司…

    Linux 2023年6月7日
    072
  • VirtualBox安装Ubuntu教程

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 准备工作 virtualBox可在官网下载,Ubuntu镜像可在 阿里云下载,选择对应电脑位数的镜像。 开始安装 1、点击&#8…

    Linux 2023年5月27日
    0143
  • MSSQL·FOR XML PATH语法转义尖括号解决方案

    阅文时长 | 0.14分钟字数统计 | 225.6字符主要内容 | 1、引言&背景 2、示例及解决方案 3、声明与参考资料『MSSQL·FOR XML PATH语法转义尖括…

    Linux 2023年6月14日
    076
  • java执行shell脚本怎么进行交互处理

    感谢我吧,什么都不说,直接上代码: package utils; import java.io.*; public class ShellUtils { public static…

    Linux 2023年5月28日
    082
  • QT删除整个文件夹

    故事背景:因为客户端要清理旧版本以及日志文件,所以需要删除一个月以前的所有文件夹 技术调研:在程序中我想把文件夹直接删除,但是调用QDir中的rmdir()或者rmpath()时要…

    Linux 2023年6月13日
    0101
  • MySQL多实例安装部署

    MySQL多实例安装部署 1、MySQL多实例概念 多实例就是在一台服务器上同时开启多个不同的数据库服务端口(例如3306、3307),同时运行多个MYSQL服务进程,这些服务进程…

    Linux 2023年6月7日
    0109
  • [云原生]Kubernetes-集群搭建(第2章)

    一、前置知识点 二、kubeadm部署方式介绍 三、安装要求 四、最终目标 五、准备环境 六、环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(…

    Linux 2023年6月13日
    062
  • Windows关闭135/137/139/445 端口

    通过IP安全策略(以关闭135端口为例) (1) 依次打开”控制面板–>系统和安全–>管理工具–>本地安全策略&#…

    Linux 2023年6月8日
    0213
  • Linux下IPC之共享内存的使用方法

    基本参考 《Unix环境高级编程》 第14.9节共享内存来学习。 需要说明的 讲shmget(key,size, flag)函数时,书上大概意识是说, 想访问已有的shm时,key…

    Linux 2023年6月7日
    071
  • bash 教程-2 shell 字符串 转义 模式扩展 特殊符号 [MD]

    我的GitHub 我的博客 我的微信 我的邮箱 bqt20094 baiqiantao@sina.com 字符串的表示 shell 中的字符串可以用 单&am…

    Linux 2023年5月28日
    058
  • 我的第一个博客

    我就是想试一试 .阿西吧 段狗是傻逼,段狗请看右边的看板娘 posted @2020-06-22 18:56 xiao-c 阅读(17 ) 评论() 编辑 Original: ht…

    Linux 2023年6月7日
    0126
  • debian与windows时间不同步的简单治疗方法

    试过几种方法, 但就这个方法好使点。hwclock -w –localtime Original: https://www.cnblogs.com/leotiger/p…

    Linux 2023年6月13日
    067
  • 软件工程 结构法方法 第2篇随笔

    建立系统的功能模型图 首先:建立系统环境图,确定系统边界 其中: 数据流为:销售的商品,日销售额等;三个输入流,三个输出流 ​ 数据源为:营业员,经理,收款员 ​ 数据潭为:经理,…

    Linux 2023年6月7日
    092
  • 那些技术实战中的架构设计方法

    上个月我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论”以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章…

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