【问题标题】:How to send variables (which are declared in the code) in a HTTP POST request body in Go? [duplicate]如何在 Go 中的 HTTP POST 请求正文中发送变量(在代码中声明)? [复制]
【发布时间】:2021-04-22 10:36:01
【问题描述】:

我使用的是 Golang 的 HTTP 客户端,POST 请求的格式如下:

package main

import (
    "log"

    "github.com/monaco-io/request"
)
var name,pass string.  //assume name and pass hold a value calculated earlier
func main() {
    client := request.Client{
        URL:    "https://google.com",
        Method: "POST",
        Params: map[string]string{"random": "random"},
        **Body:   []byte(`{"username": "ABC", "password": "XYZ"}`)**,
    }
    resp, err := client.Do()

    log.Println(resp.Code, string(resp.Data), err)
}

我想用我的变量 name 替换“ABC”,用我的变量 pass 替换“XYZ”。** 如何用变量替换常量字符串值它包含在我的代码中的函数中计算的一些字符串值。

【问题讨论】:

  • 你在问如何编组 JSON。 SO上有无数的例子,在互联网上。如果欺骗问题还不够,请搜索更多示例。

标签: http go request


【解决方案1】:

只需使用fmt.Sprintf函数

fmt.Sprintf(`{"username": "%s", "password": "%s"}`, name, pass)

https://golang.org/pkg/fmt/#Sprintf

完整的代码如下所示

package main

import (
    "fmt"
    "log"


    "github.com/monaco-io/request"  // must be v0.0.2
)

var name, pass string //assume name and pass hold a value calculated earlier

func main() {
    client := request.Client{
        URL:    "https://google.com",
        Method: "POST",
        Params: map[string]string{"random": "random"},
        Body:   []byte(fmt.Sprintf(`{"username": "%s", "password": "%s"}`, name, pass)),
    }
    resp, err := client.Do()

    log.Println(resp.Code, string(resp.Data), err)
}

【讨论】:

  • 我尝试了上面的函数,但是当我把它放在请求正文的字节数组中时,我无法让它工作。你能澄清一下正文格式吗?我尝试了 2 种不同的格式:Body : []byte(fmt.Sprintf({"username": "%s", "password": "%s"}, name, pass)) AND Body : []byte(fmt.Sprintf({"username": "%s", "password": "%s"}, name, pass)) 但上述两种格式都给出了语法错误
  • 您的错误响应是什么?也许我们可以先在 go.mod 文件中查看包“monaco-io/request”的版本。包“monaco-io/request”在v1中有很多变化,你的用例只能在v0.0.2中使用。
  • 它说出乎意料的 {,当我使用 Body 时期待表达式:[]byte({fmt.Sprintf({"username":"&s"},name)}),
  • 动词的格式是“%s”而不是“&s”。还有更多信息golang.org/pkg/fmt/#hdr-Printing
  • 永远不要使用 fmt.Sprintf 创建 JSON。改为执行实际的 JSON 编组!
猜你喜欢
  • 2016-11-16
  • 1970-01-01
  • 2018-06-19
  • 2019-11-28
  • 2014-05-09
  • 1970-01-01
  • 2010-11-24
  • 2011-03-20
相关资源
最近更新 更多