go将青龙面板里面的脚本文件都下载到本地
纯粹练手用的,大家轻喷
青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,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将青龙面板里面的脚本文件都下载到本地的更多相关文章
- Github文件夹下载到本地
1.如图:需要将以下文件夹下载到本地. https://github.com/aspnet/Docs/tree/master/aspnet/mvc/overview/getting-started/i ...
- 安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的
安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的 项目上传到svn后,同事下载项目后,没有识别出来mavn中的pom.xml文件,导致idea不能自动下载 ...
- flask使用pymysql连接MySQL,生成xls文件并下载到本地
版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...
- nodejs通过request请求远程url的文件并下载到本地
需要循环去下载远程文件,然后自己写了一个demo,可以直接运行,如下: //文件下载 var fs = require("fs"); var path = require(&quo ...
- byte转文件流 下载到本地
此方法将byte类型文件转为文件流保存到本地 byte 经过BASE64Decoder 进行编码之后的类型 所以需要解码 防止出现乱码及文件损毁 /** * byte 转文件 下载到本地 * @par ...
- 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)
欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...
- VGG16等keras预训练权重文件的下载及本地存放
VGG16等keras预训练权重文件的下载: https://github.com/fchollet/deep-learning-models/releases/ .h5文件本地存放目录: Linux ...
- php压缩文件夹并下载到本地
/** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...
- Elasticsearch集群状态脚本及grafana监控面板导出的json文件
脚本文件: #!/usr/bin/env python import datetime import time import urllib import json import urllib2 imp ...
随机推荐
- CI/CD介绍以及jenkins安装 1.1
一 .CI/CD介绍 互联网软件开发和发布,形成了一套流程标准,分为几个阶段:编码,构建,集成,测试,交付,部署 持续集成(continuous integration).持续交付(conti ...
- 零基础学Java第六节(面向对象二)
本篇文章是<零基础学Java>专栏的第六篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 继承 创建一个Person类 我们 ...
- 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv
152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...
- python基础数据类型1
python基础数据类型1 part1: ''' ''': 三个单引号用于换行的字符串 字符串可以相加(拼接)相乘(重复) 在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代 ...
- 12.MYSQL基础-常见函数
4. 常见函数 一.字符函数 概念 类似于Java的方法,将一组逻辑语句封装在方法中,对外暴露方法名 优点 隐藏了实现细节 提高代码的重用性 调用 select 函数名(实参列表) [ from 表] ...
- 一些基本的jar包
jackson与前端传送数据 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti ...
- MySQL数据库3
内容概要 自增特性 约束条件之外键 外键简介 外键关系 外键SQL语句之一对多关系 外键SQL语句之多对多关系 外键SQL语句之一对一关系 查询关键字 数据准备 查询关键字之select与from 查 ...
- 开发工具-SVG占位图片
更新日志 2022年6月10日 初始化链接. https://toolb.cn/imageholder
- 27.MySQL 索引、事务与存储引擎
MySQL 索引.事务与存储引擎 目录 MySQL 索引.事务与存储引擎 MySQL 索引 索引的概念 索引的作用及副作用 索引的作用 索引的副作用 创建索引的原则依据 索引的分类和创建 普通索引 唯 ...
- 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...