标题是说。我只需要状态代码。不回应身体。
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)
}
获得状态代码后如何中断响应流? (或者它可能吗?)
谢谢
简短的回答是......这可能是不可能的。
一般来说,HTTP客户端将始终检索包含正文的任何响应的完整响应(状态,标题和正文),因为这就是HTTP的工作方式。请注意,“HEAD”方法专门执行您想要的操作,但由于您必须使用“POST”方法,因此它显然不适用于此处。
正如评论者所提到的那样,在某种意义上,你可以通过不读它来忽略响应体(正如你当前的例子那样),但是客户端系统仍会产生下载体的网络成本 - 它只是不会在你的应用程序中出现。
理论上,您可以实现自定义HTTP客户端(或者可能配置现有客户端),以便在检索到HTTP状态时尝试终止底层TCP连接,并忽略HTTP响应的其余部分;然而,这种策略可能非常复杂,并且会受到许多可能无法控制应用程序的因素的影响。
最终,您的示例代码可能是您只能注意状态代码并忽略响应体的最佳方法。可能值得立即关闭响应读取器以向HTTP库指示不需要相关资源并且可以立即释放;但是,无法保证它会产生任何影响。此外,您可以将HTTP客户端配置为对响应主体使用非常小的缓冲区,以尝试最小化关闭主体之前使用的资源,但同样可能无法保证这会实际阻止响应主体通过网络发送。