我怎样才能获得POST请求的状态代码(没有正文)

时间:2017-12-19 12:37:52

标签: http go httprequest httpresponse http-response-codes

标题是说。 我只需要状态代码。不回应身体。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "http://api.example.com/getUserList", nil)
    res, _ := http.DefaultClient.Do(req) // <-- 300KB Full page downloading here
    fmt.Print("status code", res.StatusCode)
}

获取状态代码后如何中断响应流? (或可能吗?)

由于

1 个答案:

答案 0 :(得分:2)

简短的回答是......这可能是不可能的。

一般来说,HTTP客户端总是检索包含正文的任何​​响应的完整响应(状态,标题,正文),因为这就是HTTP的方式作品。请注意,“HEAD”方法专门执行您想要的操作,但由于您必须使用“POST”方法,因此它显然不适用于此。

正如评论者所提到的那样,在某种意义上说,你可以通过不读它来忽略响应体(正如你当前的例子所做的那样),但是客户端系统仍会产生下载体的网络成本 - 它只是不会浮出水面在你的申请中。

理论上,您可以实现自定义HTTP客户端(或者可能配置现有客户端),以便在检索到HTTP状态时尝试终止底层TCP连接,并忽略HTTP响应的其余部分;但是,这种策略可能非常复杂,并且会受到许多因素的影响。

最终,您的示例代码可能是您可以做的最好只关注状态代码并忽略响应正文。可能值得立即关闭响应读取器以向HTTP库指示不需要相关资源并且可以立即释放;但是,无法保证它会产生任何影响。此外,您可以将HTTP客户端配置为对响应主体使用非常小的缓冲区,以尝试最小化关闭主体之前使用的资源,但同样可能无法保证这会实际阻止响应主体通过网络发送。