我試圖寫入標準輸出從GET請求收到的原始HTTP響應。我認爲httputil.DumpResponse
會做我想做的事情,但它似乎在「更大」的響應中包含了神祕的字節數。如何向標準輸出寫入HTTP響應?
例如:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/plain; charset=utf-8
Date: Mon, 16 Oct 2017 15:07:53 GMT
1f43
THE ACTUAL BODY CONTENT WHICH IS 8003 BYTES
0
的1f43
似乎是響應主體的長度。 Go的http.response
談論預告片,所以也許0
是預告片的大小。
我的代碼是:
var resp *http.Response
var err error
if *isPost {
resp, err = http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(*data))
} else {
resp, err = http.Get(url)
}
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
dump, err := httputil.DumpResponse(resp, true)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", dump)
我已經閱讀了DumpResponse
和TransferWriter
代碼,但我無法揣摩出1f43
和0
從何而來。
如果我用curl做同樣的請求,我在響應中沒有得到1f43
和0
。
這是編寫原始HTTP響應的最佳方式嗎?如果是這樣,我該如何解決它以避免這些字節數?
這個「傳輸編碼:分塊」是原因。實際上,分塊響應_do_(實際上必須)具有這些「1f43」長度。所以:不要進行分塊迴應,例如通過設置Content-Length(見https://golang.org/pkg/net/http/#Request.Write)。 – Volker
啊哈,好的。有了這些信息,我發現了這種情況:在'net/http/internal/chunked'的'Write()'函數中[這裏](https://golang.org/src/net/http/internal/chunked。走)。 –
我沒有生成響應;我正在發送請求並嘗試打印我回來的已收回的響應。 –