纯粹练手用的,大家轻喷

青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,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. MySQL深入学习-day1

    书名<MySQL是怎样运行的:从根儿上理解MySQL>可自行百度 以下是知识点总结 重新认识Mysql MySQL是一个C/S架构的软件. 在Windows安装后首先注册成服务,然后会在开 ...

  2. Spring 源码(17)Spring Bean的创建过程(8)Bean的初始化

    知识回顾 Bean的创建过程会经历getBean,doGetBean,createBean,doCreateBean,然后Bean的创建又会经历实例化,属性填充,初始化. 在实例化createInst ...

  3. 在vue中路径中的@

    1.在Vue的路径中@等于src 2.在css的路径中~@等于src

  4. application.properties文件中暗藏玄机

    上次分享了如何一步一步搭建一个springboot的项目,详细参见<5分钟快速搭建一个springboot的项目>,最终的结果是在"8080"端口搭建起了服务,并成功访 ...

  5. 白嫖Azure与体验GoLand远程开发

    前言 近期因为有本地开发远程使用Linux编译部署的需求,而虚拟机的性能实在是不敢恭维,WSL的坑之前也踩过(没有systemd等),故考虑使用SSH连接云服务器开发. 目前VSCode提出了Remo ...

  6. Datax源码改造关键步骤记录

    Datax源码改造关键步骤记录: 一.作业配置1.一个job配置:reader 和writer 的column 字段必须是所有表共有的:2.reader多张表,writer一个表时,所有reader的 ...

  7. Tmux常用命令总结

    会话 # 创建会话 tmux new -s work -s是session # 查看tmux进程 ps aux | grep tmux # 连接会话 tmux attach -t work # 会话分 ...

  8. 前端工作中用到的openlayers相关的公共方法

    /** * 获取地图上的图层对象 * @param map 地图对象 * @param layerName 实例化图层时的name * @return {null}*/ getLayerByLayer ...

  9. 腾讯视频的qlv格式转换为mp4格式

    1.点击设置->下载设置->缓存管理 下的文件目录复制; 2复制在 我的电脑路径栏目中 找到缓存目录 文件夹vodcache; 3.打开视频对应文件; 4.打开cmd命令窗口 5.跳转 到 ...

  10. 想写个小说,关于C#的,名字就叫《原Csharp》吧 (第一回 买书未成炁自生 惶惶回屋遇老翁)

    以前也有写过一些小说,但是总是写写停停的,因为忙于项目和其他事情,总是耽搁很久(真的是很久)才会继续动两笔,所以我想先在这里以随笔的方式写个关于C#异世界的小故事吧,更新随缘,也稍微能让自己轻松些. ...