猿问

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

从文档中它指出


对于服务器请求,请求正文始终为非零,但在没有正文时会立即返回 EOF。


对于 ContentLength,文档说明


对于客户端请求,如果 Body 不为零,则值为 0 表示未知。


那么检查 ContentLength 是否更好


r *http.Request

if r.ContentLength == 0 {

  //empty body

}

或检查EOF


type Input struct {

    Name *string `json:"name"`

}


input := new(Input)


if err := json.NewDecoder(r.Body).Decode(input); err.Error() == "EOF" {

 //empty body

}


慕后森
浏览 117回答 2
2回答

倚天杖

你总是需要阅读正文才能知道内容是什么。客户端可以不带 no 的分块编码发送正文Content-Length,或者它甚至可能有错误并发送 aContent-Length和 no 正文。客户端从来没有义务发送它所说的将要发送的内容。该EOF检查可以工作,如果你只检查空的身体,但我仍然会还检查除了其他错误情况EOF字符串。err := json.NewDecoder(r.Body).Decode(input)switch {case err == io.EOF:    // empty bodycase err != nil:    // other error}您还可以在解组之前阅读整个正文:body, err := ioutil.ReadAll(r.Body)或者如果您担心数据过多body, err := ioutil.ReadAll(io.LimitReader(r.Body, readLimit))

holdtom

if http.Request().Body == http.NoBody {  // TODO.}
随时随地看视频慕课网APP

相关分类

Go
我要回答