Go语言实现钉钉发送通知
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,package mainimport ( "bufio" "io" "fmt" "io/ioutil" "os/exec" "net/http" "os" "strin
千家信息网最后更新 2025年02月05日Go语言实现钉钉发送通知
package mainimport ( "bufio" "io" "fmt" "io/ioutil" "os/exec" "net/http" "os" "strings")func GetKey() (timestamp string ,sign string, err error){ cmd := exec.Command("/bin/python", "/application/scripts/hezhong_host_status/aaa.py") stdout , err := cmd.StdoutPipe() if err != nil { fmt.Println("Error:can not obtain stdout pipe for command:%s \n", err) return timestamp , sign, err } if err := cmd.Start() ; err != nil { fmt.Println("Error:The command is err ",err) return timestamp, sign,err } var Key []string //读取所有输出 bytes := bufio.NewReader(stdout) for { line ,err:= bytes.ReadString('\n') if err == io.EOF{ break } if err != nil { fmt.Println("Read Err:",err) } Key = append(Key,line) } if err := cmd.Wait();err!= nil{ fmt.Println("Wait",err.Error()) return timestamp, sign ,err } timestamp = Key[0] sign = Key[1] return timestamp ,sign ,nil}func SendDingMsg(msg string) { //请求地址模板 timestamp , sign , err := GetKey() if err != nil { fmt.Println("Get Key Err:",err) } timestamp = strings.TrimRight(timestamp, "\n") sign = strings.TrimRight(sign, "\n") //timestamp := time.Now().UnixNano() / 1e6 //timestamp := int64(1572870805748) //sign := "oJ5SHD3IwCWVIcL78k3pgX0tfQnjDfcDZMPXAI%2BvrFE%3D" webHook := "https://oapi.dingtalk.com/robot/send?access_token=628d11124aef5f9efe2a8c8a6b5afa2b67ab01dxxxxxxxxxxxxxxxxxxxxx&"+ "timestamp=" + timestamp + "&sign=" + sign content := `{"msgtype": "text", "text": {"content": "`+ msg + `"}, "at": { "atMobiles": [ "18301371817" ], "isAtAll": true } }` //创建一个请求 req, err := http.NewRequest("POST", webHook, strings.NewReader(content)) if err != nil { fmt.Println(err) } client := &http.Client{} //设置请求头 req.Header.Set("Content-Type", "application/json") req.Header.Set("User-agent","firefox") //发送请求 resp, err := client.Do(req) //关闭请求 defer resp.Body.Close() fmt.Println(resp.StatusCode) body,_ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) if err != nil { fmt.Println("handle error") }}func main(){ SendDingMsg(os.Args[1])}
辅助Python脚本:
#!python 2.7import timeimport hmacimport hashlibimport base64import urllibtimestamp = long(round(time.time() * 1000))secret = 'this is secret'secret_enc = bytes(secret).encode('utf-8')string_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = bytes(string_to_sign).encode('utf-8')hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()sign = urllib.quote_plus(base64.b64encode(hmac_code))print(timestamp)print(sign)
地址
模板
脚本
辅助
输出
语言
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小马互联网科技
灵武办公软件开发公司贵吗
港股网络安全龙头股
数据库对角线
公司办公室安装服务器如何降温
校园网络安全问题该如何应对
vmware免费云服务器
新乡市嘟嘟网络技术 诈骗
代谢信号转导数据库
怎么用万德查数据库
web服务器 支持php
普吉岛天气预报软件开发
如何设置数据库表的显示格式
嘉兴网络技术职业学院
数据库原理第二版正版课本
关于学生网络安全的课件
服务器路由配置命令步骤
linux服务器PHP管理
皮城警备服务器卡
软件开发工具app是什么
网络安全软件使用
计算网络技术专业是什么东西
深圳湾java软件开发
勘界报告最新数据库
云服务器配置数据库
庐阳区数据网络技术开发常见问题
镇江浪潮服务器工厂
数据库表单中的主键和外键
网络安全竞赛笔记本
后台服务器有问题怎么办