从文档中可以看出这一点
对于服务器请求,Request Body始终为非零,但在没有正文时立即返回EOF.
对于ContentLength,文档说明
对于客户端请求,如果Body不是nil ,则值0表示未知.
那么检查ContentLength会更好吗?
r *http.Request
if r.ContentLength == 0 {
//empty body
}
Run Code Online (Sandbox Code Playgroud)
或检查EOF
type Input struct {
Name *string `json:"name"`
}
input := new(Input)
if err := json.NewDecoder(r.Body).Decode(input); err.Error() == "EOF" {
//empty body
}
Run Code Online (Sandbox Code Playgroud)
Jim*_*imB 28
你总是需要阅读身体才能知道内容是什么.客户端可以使用chunked编码发送正文Content-Length,或者甚至可能有错误并发送一个Content-Length没有正文.客户从未有义务发送它要发送的内容.
该EOF检查可以工作,如果你只检查空的身体,但我仍然会还检查除了其他错误情况EOF字符串.
err := json.NewDecoder(r.Body).Decode(input)
switch {
case err == io.EOF:
// empty body
case err != nil:
// other error
}
Run Code Online (Sandbox Code Playgroud)
你也可以在解组之前阅读整个身体:
body, err := ioutil.ReadAll(r.Body)
Run Code Online (Sandbox Code Playgroud)
或者如果你担心太多的数据
body, err := ioutil.ReadAll(io.LimitReader(r.Body, readLimit))
Run Code Online (Sandbox Code Playgroud)
小智 13
if http.Request().Body == http.NoBody {
// TODO.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11233 次 |
| 最近记录: |