douxi0098 2018-11-20 22:32
浏览 186
已采纳

内容的Golang长度

I couldn't find anything helpful online on this one.

I am writing an REST API, and I want to log the size of the body of the request in bytes for metrics. Go net/http API does not provide that directly. http.Request does have Content-Length field, but that field can be empty or the client might send false data.

Is there a way to get that in the middlware level? The bruteforce method would be to read the full body and check the size. But if I do that in the middleware, the handler will not have access to the body because it would have been read and closed.

  • 写回答

3条回答 默认 最新

  • douyan6548 2018-11-21 02:14
    关注

    Why do you want a middle in here?
    The simple way is b, err = io.Copy(anyWriterOrMultiwriter, r.Body)
    b is total content length of request when err == nil
    Use request body as you want. Also b, err = io.Copy(ioutil.Discard, r.Body)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?