为什么不 byte.NewBuffer 接受全身请求?

我是 golang 的新手,我正在编写一个脚本来使用传入的 webhook 向 slack 发送消息。


slackBody, _ := json.Marshal(SlackRequestBody{Text: msg, EventName: "xxx", AccountId: "xxx",

        EventTime: "xxxxx", UserName: "xxxx", yyy: "xx", Status: "xx"})

    fmt.Println(string(slackBody))

    //test := ioutil.ReadAll(bytes.NewBuffer(slackBody))

    req, err := http.NewRequest(http.MethodPost, webhookUrl, bytes.NewBuffer(slackBody))

    if err != nil {

        return err

    }


    req.Header.Add("Content-Type", "application/json")


    client := &http.Client{Timeout: 10 * time.Second}

    resp, err := client.Do(req)


这个帖子请求只包含“req”请求的几个字。你能帮我弄清楚这个问题吗?


慕哥9229398
浏览 158回答 1
1回答

森林海

这里没有错bytes.NewBuffer() 。从 slack 的角度来看,它只识别“文本”字段提供的消息。你需要重新设计你的SlackRequestBody结构。当您使用 Webhook API 发送消息时,您的请求正文应遵循slack.POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXXContent-type: application/json{  "text": ...  "blocks": ...  "attachments": ...  "thread_ts": ...  "mrkdwn": ...   ... ... ...}所以,你的SlackRequestBody结构应该是这样的:package mainimport (    "encoding/json"    "fmt"    "time")type SlackRequestBody struct {    Text            string  `json:"text"`    Blocks          []Block `json:"blocks,omitempty"`    ThreadTimestamp string  `json:"thread_ts,omitempty"`    Mrkdwn          bool    `json:"mrkdwn,omitempty"`}type Block struct {    BlockID string `json:"block_id,omitempty"`    Type    string `json:"type"`    Text    Text   `json:"text"`}type Text struct {    Type string `json:"type"`    Text string `json:"text"`}func main() {    var payload = &SlackRequestBody{        Text: "Your message",        Blocks: []Block{            {                Type: "section",                Text: Text{                    Type: "plain_text",                    Text: "User Name: XXXX",                },                BlockID: "username",            },            {                Type: "section",                Text: Text{                    Type: "plain_text",                    Text: "Event Time: " + time.Now().String(),                },                BlockID: "eventTime",            },        },    }    data, err := json.Marshal(payload)    if err != nil {        panic(err)    }    fmt.Println(string(data))}去游乐场输出:{   "text":"Your message",   "blocks":[      {         "block_id":"username",         "type":"section",         "text":{            "type":"plain_text",            "text":"User Name: XXXX"         }      },      {         "block_id":"eventTime",         "type":"section",         "text":{            "type":"plain_text",            "text":"Event Time: 2020-03-29 14:11:33.533827881 +0600 +06 m=+0.000078203"         }      }   ]}我会推荐你使用 slack 的官方go 客户端。它将提供更大的灵活性。快乐编码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go