Go语言实现钉钉发送通知
作者:蓝叶子Sheep 发布时间:2024-05-08 10:44:29
标签:go,钉钉,通知
具体代码如下所示:
package main
import (
"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.7
import time
import hmac
import hashlib
import base64
import urllib
timestamp = 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)
总结
以上所述是小编给大家介绍的Go语言实现钉钉发送通知网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://blog.51cto.com/dellinger/2447790


猜你喜欢
- A.课程内容本节课主要学习函数的返回值returm,通过学习编写一个汇率转换器程序。B.知识点(1)定义函数(2)调用函数(3)返回值C.用
- 今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现:*** ACTION NAME:()
- 1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2、创建一个数据库MYSQLDA
- Django中上传文件方式。如何实现文件上传功能?1创建项目uploadfile:创建app:front项目设置INSTALLED_APPS
- Pycharm的下方工具栏中有两个窗口:Python Console和Terminal(如下图)其中,Python Console叫做Pyt
- 本文实例讲述了Python实现的IP端口扫描工具类。分享给大家供大家参考,具体如下:去年服务器老是被攻击,每次上线之后,上线的人急急忙忙下班
- 一、安装步骤 1.官网下载安装包2.安装一路next即可,安装位置可改到D盘3.添加环境变量将如上路径添加到系统path,不会的参
- 多线程概述多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率。python提供了两个模块来实现多线程thr
- 函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。注意其中:map和filter返回一个惰性序列,可
- 1、版本说明 :python 2.7.10, Django (1.6.11.6),centos72、步骤说明:A、django 建立项目dj
- 本文总结了asp初学者在学习asp过程中可能会碰到的常见问题,并做了详细的解答。1.如何用Asp判断你的网站的虚拟物理路径 答:使用Mapp
- 前言Pandas是python的一个数据分析包,提供了大量的快速便捷处理数据的函数和方法。其中Pandas定义了Series 和 DataF
- 目录1、字典的定义字典和列表的区别:字典的基本使用2、循环遍历3、字符串的定义4、字符串的常用操作字符串 查找和替换字符串 文本对齐演练去除
- 本文实例为大家分享了bootstrap图片轮播效果的实现代码,供大家参考,具体内容如下<!DOCTYPE html><ht
- ResNet沿用VGG完整的KaTeX parse error: Undefined control sequence: \time at
- 前言这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方
- 1.基本构架:mport PIL.Image 相关模块img=Image.open(img_name) 打开图片img.save(save_
- 察者模式定义定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。观察者模式提供了一种对象设计,让
- 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程。那么本教程将花费十分钟的时间带你走入Python的大门。本文的内容
- 目录一、前言二、Json.loads与eval 性能对比1. eval2. json.loads一、前言最近发现一些小伙伴使用eval来处理