給定一個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 關注
- 336 瀏覽
添加回答
舉報
0/150
提交
取消