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