分享一个go发送报警的客户端

本文介绍了一种使用Go语言发送HTTP POST请求并携带JSON数据的方法。通过具体代码示例,展示了如何构造请求体、设置请求头以及发送请求的过程。此教程适用于需要通过编程方式发送报警或通知的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用到的技术:

  • http使用post提交json数据

代码仅供参考,不要直接拿去用,因为需要配合一个服务端去接收。

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"github.com/urfave/cli"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"time"
)

var (
	alert_url      = os.Getenv("ALERT_URL")
	alert_receiver = os.Getenv("ALERT_RECEIVER")
	alert_subject  = "系统报警"
)

type MsgBody struct {
	Receiver string         `json:"receiver"`
	Message  [1]MessageBody `json:"message"`
	Subject  string         `json:"subject"`
}
type MessageBody struct {
	Level string `json:"level"`
	Msg   string `json:"msg"`
	Time  string `json:"start_time"`
}

func send(msg string) {
	var msg_body [1]MessageBody
	msg_body[0] = MessageBody{
		Level: "INFO",
		Time:  time.Now().Format("2006-01-02 15:04:05"),
		Msg:   msg,
	}

	request := MsgBody{
		Receiver: alert_receiver,
		Message:  msg_body,
		Subject:  alert_subject,
	}
	requestBody := new(bytes.Buffer)

	json.NewEncoder(requestBody).Encode(request)

	req, err := http.NewRequest("POST", alert_url, requestBody)
	req.Header.Set("Content-Type", "application/json")

	client := &http.Client{}

	resp, err := client.Do(req)

	if err != nil {

		panic(err)

	}
	fmt.Println()

	defer resp.Body.Close()

	fmt.Println("response Status:", resp.Status)

	fmt.Println("response Headers:", resp.Header)

	body, _ := ioutil.ReadAll(resp.Body)

	fmt.Println("response Body:", string(body))

}
func main() {
	app := cli.NewApp()
	app.Name = "报警客户端"
	app.Version = "1.0"
	app.Usage = "设置环境变量"
	app.Action = func(c *cli.Context) error {
		if alert_url == "" || alert_receiver == "" {
			panic("没有设置报警地址或者接受者")
			os.Exit(1)
		}
		if len(c.Args()) == 0 {
			panic("请输入告警消息")
			os.Exit(1)
		}
		send(c.Args()[0])
		return nil
	}
	app.Flags = []cli.Flag{
		cli.StringFlag{
			Name:        "url, u",
			Usage:       "报警的URL地址",
			Value:       os.Getenv("ALERT_URL"),
			Destination: &alert_url,
		}, cli.StringFlag{
			Name:        "receiver, r",
			Usage:       "报警的接受者",
			Value:       os.Getenv("ALERT_RECEIVER"),
			Destination: &alert_receiver,
		}, cli.StringFlag{
			Name:        "subjuect, s",
			Usage:       "报警主题",
			Value:       "系统报警",
			Destination: &alert_subject,
		},
	}
	err := app.Run(os.Args)
	if err != nil {
		log.Fatal(err)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值