防止golang http.NewRequest向POST主体添加大括号

时间:2017-07-16 22:10:47

标签: go

这必须相当简单,但我无法解决为什么在使用go发出HTTP请求时,请求的主体被包含在另外一组括号中:

package main

import (
    "bytes"
    "fmt"
    "net/http"
)

func main() {
    jsonStr := []byte(`{"some":"test","json":"data"}`)
    req, _ := http.NewRequest("POST", "http://test.com", bytes.NewBuffer(jsonStr))
    fmt.Print(req.Body)
}

这导致:

{{"some":"test","json":"data"}}

在我的实际代码中,我使用json.Marshal和struct来生成字节缓冲区,但得到相同的结果。结果是API拒绝了请求(正如预期的那样)。

如何防止添加额外的大括号?

1 个答案:

答案 0 :(得分:5)

正文的印刷表示与读者的内容不同。 http.NewRequest函数不会向POST主体添加大括号。

这是发生了什么:

正文是ioutil.nopCloser,其中“读者”字段设置为*bytes.Buffer

fmt.Print函数将ioutil.nopCloser结构打印为{ +字段+ }。这是打印输出中额外的大括号。 fmt.Print函数通过调用Reader方法打印*bytes.Buffer.String字段。 String方法将内容作为字符串返回。

通过阅读来发送正文,而不是通过打印它。