如何计算“net / http”客户端发送/接收的字节数?

时间:2017-03-03 05:03:45

标签: go

是否有可能获得"net/http" Client.Do请求期间发送和接收的总字节数(用于监控或统计目的)?

如果不可能,您如何以最少的开发工作和性能影响获得此信息?

1 个答案:

答案 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/

如果你想调试连接,这是一个有用的工具。