http.Client POST 在发送正文之前读取响应

client.Do("POST", "example.com", body)有没有办法在接收/关闭整个响应正文之前执行并读取响应标头?这类似于 JavaScript XHR 请求发出一个事件,表明已收到标头,您可以在请求的其余部分到达之前读取它们。

我想要完成的是创建一种“智能客户端”,它使用服务器标头中的信息来确定在请求正文中上传的内容。因此,我需要启动请求,读取响应标头,然后开始写入请求正文。由于我的系统的性质,我无法将其拆分为不同的请求。我相信在协议级别是可能的,但我不确定go的http库是否支持它。



翻翻过去那场雪
浏览 74回答 2
2回答

慕无忌1623718

http 客户端 Do 函数在返回整个响应正文之前不会阻塞。如果您不想阅读完整的响应,为什么不在检查标题后使用 res.Body.Close() 呢?我认为如果你想要大致相同的行为,它应该有效。据医生说。当读取 Body 字段时,响应正文将按需流式传输。如果网络连接失败或服务器终止响应,Body.Read 调用将返回错误。尽管默认 http.Client 的 DefaultTransport(即 http.Transport)并不保证在您指定之前它不会读取任何字节。

RISEBY

OPTIONS您可以通过在发送实际请求之前向 url发送请求并读取响应标头来满足您的要求。响应标头将包含执行首选请求所需的所有标头。req, _ := http.NewRequest("OPTIONS", "example.com", nil) resp, _ := client.Do(req)
打开App,查看更多内容
随时随地看视频慕课网APP