Http te如何发送包含URL参数和JSON正文的帖子?
我找到了如何发送带有URL参数的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
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(在不同的示例中)-这就是我弄错的地方。