为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
翻翻过去那场雪 2023-08-07 14:53:03
client.Do("POST", "example.com", body)有没有办法在接收/关闭整个响应正文之前执行并读取响应标头?这类似于 JavaScript XHR 请求发出一个事件,表明已收到标头,您可以在请求的其余部分到达之前读取它们。我想要完成的是创建一种“智能客户端”,它使用服务器标头中的信息来确定在请求正文中上传的内容。因此,我需要启动请求,读取响应标头,然后开始写入请求正文。由于我的系统的性质,我无法将其拆分为不同的请求。我相信在协议级别是可能的,但我不确定go的http库是否支持它。
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

http 客户端 Do 函数在返回整个响应正文之前不会阻塞。如果您不想阅读完整的响应,为什么不在检查标题后使用 res.Body.Close() 呢?我认为如果你想要大致相同的行为,它应该有效。据医生说。

当读取 Body 字段时,响应正文将按需流式传输。如果网络连接失败或服务器终止响应,Body.Read 调用将返回错误。

尽管默认 http.Client 的 DefaultTransport(即 http.Transport)并不保证在您指定之前它不会读取任何字节。


查看完整回答
反对 回复 2023-08-07
?
RISEBY

TA贡献1856条经验 获得超5个赞

OPTIONS您可以通过在发送实际请求之前向 url发送请求并读取响应标头来满足您的要求。

响应标头将包含执行首选请求所需的所有标头。

req, _ := http.NewRequest("OPTIONS", "example.com", nil)

resp, _ := client.Do(req)


查看完整回答
反对 回复 2023-08-07
  • 2 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信