为什么 Go 不能正确读取请求?

我的 API 需要解析传入的请求。第一步,需要通过包的Go的ReadAll()函数读取数据ioutil。为什么会出现错误?


在官方文档不给一个暗示,因为这种错误的原因没有说明。


func ParseRequest(w http.ResponseWriter, r *http.Request) {

    body, err := ioutil.ReadAll(r.Body)


    if err != nil {

        // handle the error

    }

}


犯罪嫌疑人X
浏览 210回答 2
2回答

慕尼黑8549860

如果客户端确实发送了无效的 JSON,则是客户端的错误:400 Bad Request。如果 JSON 有效但服务器代码包含错误,则服务器故障: 500 Internal Server error.

达令说

ioutil.ReadAll可能由于多种原因而失败。它能够读取任何io.Reader,而不仅仅是 HTTP 请求正文。并且Request.Body只是一个io.ReadCloser. 生成一个与网络套接字以外的东西相关联的东西对我来说是完全合法的(我一直对 http 做这些事情来构建代理和隧道协议)。很明显,许多类型的io.Reader事件都可能有错误(例如,您可能无法访问文件,或者磁盘可能在读取过程中途被卸载)。特定于 HTTP,您可能类似地预期网络故障错误。如果网络套接字在读取请求正文的中途收到 RST 数据包,您会期望发生什么?但最终,您应该带走的一点是您必须处理错误,因为Reader接口可能会产生错误。不要假设该接口是如何实现的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go