为了账号安全,请及时绑定邮箱和手机立即绑定

检查空请求正文的最佳方法是什么?

检查空请求正文的最佳方法是什么?

Go
慕后森 2021-11-08 17:01:08
从文档中它指出对于服务器请求,请求正文始终为非零,但在没有正文时会立即返回 EOF。对于 ContentLength,文档说明对于客户端请求,如果 Body 不为零,则值为 0 表示未知。那么检查 ContentLength 是否更好r *http.Requestif r.ContentLength == 0 {  //empty body}或检查EOFtype Input struct {    Name *string `json:"name"`}input := new(Input)if err := json.NewDecoder(r.Body).Decode(input); err.Error() == "EOF" { //empty body}
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

你总是需要阅读正文才能知道内容是什么。客户端可以不带 no 的分块编码发送正文Content-Length,或者它甚至可能有错误并发送 aContent-Length和 no 正文。客户端从来没有义务发送它所说的将要发送的内容。


该EOF检查可以工作,如果你只检查空的身体,但我仍然会还检查除了其他错误情况EOF字符串。


err := json.NewDecoder(r.Body).Decode(input)

switch {

case err == io.EOF:

    // empty body

case err != nil:

    // other error

}

您还可以在解组之前阅读整个正文:


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

或者如果您担心数据过多


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


查看完整回答
反对 回复 2021-11-08
?
holdtom

TA贡献1805条经验 获得超10个赞

if http.Request().Body == http.NoBody {

  // TODO.

}


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信