如何发送带有 URL 参数和 JSON 正文的 POST?

How te send a POST with both URL parameters and a JSON body?

我找到了如何发送带有 URL 参数的 POST,或者如何发送带有 JSON 正文的 POST,但我不知道如何发送将它们组合在一起(带有参数的 URL 和正文 JSON 的请求)。

下面的代码(不正确)显示了我正在寻找的组合。我可以使用 bytes.NewBuffer(jsonStr)strings.NewReader(parm.Encode()),但不能同时使用。

package main

import (
    "bytes"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    var jsonStr = []byte(`{"title":"my request"}`)
    parm := url.Values{}
    parm.Add("token", "hello")
    req, err := http.NewRequest("POST", "https://postman-echo.com/post", bytes.NewBuffer(jsonStr), strings.NewReader(parm.Encode()))
    if err != nil {
        panic(err)
    }
    req.Header.Set("Content-Type", "application/json")
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

}

如何构建包含所有组件的完整 POST 调用?

使用唯一的 json 作为您的请求主体,并像这样应用 URL 参数:

req.URL.RawQuery = parm.Encode()

来自Go doing a GET request and building the Querystring