如何发送带有 URL 参数和 JSON 正文的 POST? [关闭]
Posted
技术标签:
【中文标题】如何发送带有 URL 参数和 JSON 正文的 POST? [关闭]【英文标题】:How te send a POST with both URL parameters and a JSON body? [closed] 【发布时间】:2021-08-17 07:16:33 【问题描述】:我找到了如何发送带有 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
调用?
【问题讨论】:
我认为您不应该尝试在请求正文中发送 URL 参数。正如你所说,你不能同时使用两者(因为 HTTP 请求意味着有一个单一的主体,URL 是分开的)。 这些不是 URL 参数。根据定义,URL 参数是 URL 的参数。 @Flimzy 是的,我知道,我从 Go 开始,并尝试从 Python 中移植我所知道的内容,其中一次调用即可获取参数和正文。 很好奇。如果你知道这一点,我想知道你为什么在你的问题中这么说。 @Flimzy " ... 不是 URL 参数" 啊啊啊,好吧。我正在阅读一个页面,其中parm
用于正文和 URL(在不同的示例中) - 这是我弄错的地方。
【参考方案1】:
使用唯一的 json 作为您的请求正文,并应用如下 URL 参数:
req.URL.RawQuery = parm.Encode()
来自Go doing a GET request and building the Querystring
【讨论】:
以上是关于如何发送带有 URL 参数和 JSON 正文的 POST? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Retrofit POST 正文作为 JSON 字符串发送?
如何通过 Windows 批处理脚本中的 curl 发送带有 json 正文的 POST 请求
是否可以在 Axios 中发送带有 JSON 正文的 get 请求?
发送带有参数的 Alamofire 请求以及 HTTP 正文中的图像