2017-07-16 120 views
0

這必須相當簡單,但我無法弄清楚爲什麼在執行HTTP請求時,請求的主體會被另外一組大括號:阻止golang http.NewRequest向POST主體添加大括號

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和結構來生成字節的緩衝區,但得到了同樣的結果。結果是API拒絕了請求(如預期的那樣)。

如何防止添加額外的大括號?

回答

3

身體的印刷表示與讀者的內容不一樣。 http.NewRequest函數不向花括號添加大括號。

這裏是發生了什麼事情:

身體是一個ioutil.nopCloser與設置爲*bytes.Buffer讀者字段。

fmt.Print函數打印ioutil.nopCloser結構爲{ +字段+ }。這是打印輸出中額外的大括號。 fmt.Print函數通過調用*bytes.Buffer.String方法打印Reader字段。 String方法以字符串形式返回內容。

身體是通過閱讀而不是通過打印發送的。