给定一个http.ResponseWriter
已经完成了一些.Write()
s的,可以直接获得响应的当前累积长度吗?
我很确定这可以通过Hijack
转换来完成,但我想知道是否可以直接完成。
给定一个http.ResponseWriter
已经完成了一些.Write()
s的,可以直接获得响应的当前累积长度吗?
我很确定这可以通过Hijack
转换来完成,但我想知道是否可以直接完成。
即使你知道你得到了什么,在http.ResponseWriter
界面的底层,有一些可用的东西的可能性很低。如果您仔细查看使用 http 包的标准获得的结构ServeHTTP
,您会发现没有办法获得缓冲区的长度,而是劫持它。
您可以做的替代方法是跟踪作者:
type ResponseWriterWithLength struct {
http.ResponseWriter
length int
}
func (w *ResponseWriterWithLength) Write(b []byte) (n int, err error) {
n, err = w.ResponseWriter.Write(b)
w.length += n
return
}
func (w *ResponseWriterWithLength) Length() int {
return w.length
}
func MyServant(w http.ResponseWriter, r *http.Request) {
lengthWriter := &ResponseWriterWithLength{w, 0}
}
您甚至可能想编写自己的版本http.Server
,ResponseWriterWithLength
默认情况下提供。