Http te如何发送包含URL参数和JSON正文的帖子?

Http te如何发送包含URL参数和JSON正文的帖子?,http,go,post,url-parameters,document-body,Http,Go,Post,Url Parameters,Document Body,我找到了如何发送带有URL参数的POST,或者如何发送带有JSON正文的POST,但我不知道如何将它们组合在一起(一个既有带参数的URL又有JSON正文的请求) 下面的代码(不正确)显示了我正在寻找的通信。我可以使用bytes.NewBuffer(jsonStr)或strings.NewReader(parm.Encode()),但不能同时使用 package main import ( "bytes" "net/http" &q

我找到了如何发送带有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()

中,我认为您不应该尝试在请求正文中发送URL参数。正如您所说,不能同时使用这两个参数(因为HTTP请求意味着只有一个主体,URL是独立的)。这些不是URL参数。URL参数,顾名思义,是URL的参数。@Flimzy是的,我知道,我从Go开始,尝试移植我从Python知道的内容,其中一个调用同时获取参数和正文。好奇。如果你知道这一点,我想知道你为什么在你的问题中不这么说。@Flimzy“…不是URL参数”啊,好的。我在读一个页面,其中
parm
同时用于正文和URL(在不同的示例中)-这就是我弄错的地方。