如何发送带有 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? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章