登录
首页 >  Golang >  Go问答

在发送POST请求时,http.Client 在读取正文之前获取响应

来源:stackoverflow

时间:2024-03-12 15:37:02 142浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《在发送POST请求时,http.Client 在读取正文之前获取响应》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

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

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


解决方案


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

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

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

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

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

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

resp, _ := client.Do(req)

以上就是《在发送POST请求时,http.Client 在读取正文之前获取响应》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>