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

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

如果客户端发送的不完整,服务端会阻塞在 n, err := bufReader.Read(data) 这里,直至读取到完整字节,或者客户端关闭了,或者是 ReadTimeout 超时。UP 要贴上 err 的错误信息。如果读取的字节数不够 ContentLength,read 又没错误,那就奇了怪了

#6
更多评论

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