新手 求助(关于net/http包request对象请求体内容解析字节丢失问题)

Septemberrrrrr · 2023-05-26 13:16:31 · 2083 次点击

data := make([]byte, r.ContentLength + 200) 解决

#1
更多评论

1楼 @a984120978

func webhook(w http.ResponseWriter, r *http.Request) {
    bufReader := bufio.NewReader(r.Body)
    defer r.Body.Close()

    data := make([]byte, r.ContentLength+200)
    n, err := bufReader.Read(data)
    fmt.Println("总长度为", r.ContentLength)
    fmt.Println("定义的buff长度", len(data))
    fmt.Println("读取的长度", n)
    if err != nil {
        fmt.Println("Error reading request body:", err)
        return
    }
}

输出:

总长度为 5900
定义的buff长度 6100
读取的长度 3759

我不理解,为什么实际读取的数据和ContentLength的长度不一致

#2

r.ContentLength 是接口的 Response Header 返回的, 也就是 r.Header.Get("Content-Length"),由服务端决定。你可以看一下 net/http/transfer.go:523

看错了,以为是 http 请求响应的

#3