我试图写入标准输出从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。走)。 –
我没有生成响应;我正在发送请求并尝试打印我回来的已收回的响应。 –