为了账号安全,请及时绑定邮箱和手机立即绑定

如何从http.ResponseWriter获取当前响应长度

如何从http.ResponseWriter获取当前响应长度

Go
素胚勾勒不出你 2021-05-05 21:21:24
给定一个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默认情况下提供。


查看完整回答
反对 回复 2021-05-24
  • 1 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信