纯粹练手用的,大家轻喷

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

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"`
}

go将青龙面板里面的脚本文件都下载到本地的更多相关文章

  1. Github文件夹下载到本地

    1.如图:需要将以下文件夹下载到本地. https://github.com/aspnet/Docs/tree/master/aspnet/mvc/overview/getting-started/i ...

  2. 安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的

    安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的 项目上传到svn后,同事下载项目后,没有识别出来mavn中的pom.xml文件,导致idea不能自动下载 ...

  3. flask使用pymysql连接MySQL,生成xls文件并下载到本地

    版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...

  4. nodejs通过request请求远程url的文件并下载到本地

    需要循环去下载远程文件,然后自己写了一个demo,可以直接运行,如下: //文件下载 var fs = require("fs"); var path = require(&quo ...

  5. byte转文件流 下载到本地

    此方法将byte类型文件转为文件流保存到本地 byte 经过BASE64Decoder 进行编码之后的类型 所以需要解码 防止出现乱码及文件损毁 /** * byte 转文件 下载到本地 * @par ...

  6. 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)

    欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...

  7. VGG16等keras预训练权重文件的下载及本地存放

    VGG16等keras预训练权重文件的下载: https://github.com/fchollet/deep-learning-models/releases/ .h5文件本地存放目录: Linux ...

  8. php压缩文件夹并下载到本地

    /** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...

  9. Elasticsearch集群状态脚本及grafana监控面板导出的json文件

    脚本文件: #!/usr/bin/env python import datetime import time import urllib import json import urllib2 imp ...

随机推荐

  1. kNN-预测

    现在进行第五步,对数据进行预测 那么要做的的是从数据集里面拿出一部分作为要预测的,剩下的去比较,书上使用的是10% # 对之前做好的kNN算法进行预测 # 首先获取之前构造好的kNN分类器.数据.规则 ...

  2. Java 17 新特性:switch的模式匹配(Preview)

    还记得Java 16中的instanceof增强吗? 通过下面这个例子再回忆一下: Map<String, Object> data = new HashMap<>(); da ...

  3. 由C# dynamic是否装箱引发的思考

    前言 前几天在技术群里看到有同学在讨论关于dynamic是否会存在装箱拆箱的问题,我当时第一想法是"会".至于为啥会有很多人有这种疑问,主要是因为觉得dynamic可能是因为有点特 ...

  4. Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能

    在Kube-OVN社区小伙伴的共同努力下,Kube-OVN v1.10.0于五月份正式发布.Kube-OVN v1.10.0版本中,我们一如既往地对Kube-OVN 的功能.性能.稳定性和易用性进行了 ...

  5. 移动云使用 JuiceFS 支持 Apache HBase 增效降本的探索

    作者简介: 陈海峰,移动云数据库 Apache HBase 开发人员,对 Apache HBase.RBF.Apache Spark 有浓厚兴趣. 背景 Apache HBase 是 Apache H ...

  6. CSS中html的标签元素分类

    在CSS中,html中的标签元素大体被分为三种不同的类型: 块状元素.内联元素(又叫行内元素)和内联块状元素.    常用的块状元素有:  <div>.<p>.<h1&g ...

  7. 使用 vim 快速对当前文件夹下的文件批量重命名

    前言 我们在使用 Linux 的时候,有很多种方法可以对文件进行重命名,例如 命令行 下的 mv 命令,或者是使用像 dolphin 这样的图形文件管理器.但是有时候需要对一个文件夹下的所有文件批量重 ...

  8. MASA Auth - SSO与Identity设计

    AAAA AAAA即认证.授权.审计.账号(Authentication.Authorization.Audit.Account).在安全领域我们绕不开的两个问题: 授权过程可靠:让第三方程序能够访问 ...

  9. css做旋转相册效果

    css做旋转相册效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  10. Jmter入门教程

    Jmter入门教程 本文已同步到公众号,欢迎关注: 1. 简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免 ...