是否有可能获得"net/http"
Client.Do
请求期间发送和接收的总字节数(用于监控或统计目的)?
如果不可能,您如何以最少的开发工作和性能影响获得此信息?
答案 0 :(得分:1)
对于发送的字节数,如果您使用client.Do:
,您应该能够在发送之前转储请求。https://golang.org/pkg/net/http/httputil/#DumpRequestOut
dump, err := httputil.DumpRequestOut(req, true)
if err != nil {
log.Fatal(err)
}
fmt.Printf("request len:%d\n\n%q",len(dump), dump)
对于收到的字节数,是指响应中的字节数吗?如果是这样,请使用httputil.DumpResponse:
https://golang.org/pkg/net/http/httputil/#DumpResponse
dump, err := httputil.DumpResponse(resp, true)
if err != nil {
log.Fatal(err)
}
fmt.Printf("response len:%d\n\n%q", len(dump),dump)
从最小影响的角度来看,这将会得到最重要的影响,最后一个影响是通过循环标题来分别测量正文和标题,因为那时你不会转储到字符串,但它会#39 ; s不太可能给你带来巨大的变化,所以我先尝试一下这个简单的方法。通过在golang.org docs上查看src来查看上面两个函数的代码,你可以将它拉出来并用计算它们来代替累积字节。
要跟踪执行,请查看httptrace包和客户端跟踪:
https://golang.org/pkg/net/http/httptrace/
如果你想调试连接,这是一个有用的工具。