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

问题描述 投票:-2回答:1

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

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 go httprequest httpresponse http-response-codes
1个回答
2
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.