如何发送带有 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 正文中的图像

使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务

带有标头和原始 json 正文的 Volley POST 请求