如果http.ResponseWriter
已经完成了.Write()
的某些操作,那么当前累积的响应长度是否可以直接获得?
我很确定这可以通过Hijack
转换来完成,但我想知道它是否可以直接完成。
答案 0 :(得分:10)
即使你知道你得到了什么,在http.ResponseWriter
界面的基础上,机会很低,有一些可用的东西。如果您使用http包的标准ServeHTTP
在结构中look closer,您将看到没有办法达到缓冲区的长度而是劫持它。
你能做什么,是影响作家:
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
提供服务。