给定一个http.ResponseWriter已经执行了若干次的.Write(),可以直接获得当前累积的响应长度吗?我很确定这可以通过Hijack转换来完成,但是我想知道是否可以直接完成。
1 回答
莫回无
TA贡献1865条经验 获得超7个赞
即使您知道所得到的东西,但在该http.ResponseWriter接口的基础上,存在有用的几率也很低。如果您仔细查看使用ServeHTTPhttp软件包标准获得的结构,您会发现无法劫持缓冲区的长度。
或者,您可以做的是遮蔽作者:
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默认情况下提供。
- 1 回答
- 0 关注
- 308 浏览
添加回答
举报
0/150
提交
取消