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

标签 go

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

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

最佳答案

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

The response body is streamed on demand as the Body field is read. If the network connection fails or the server terminates the response, Body.Read calls return an error.



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

关于go - http.Client POST 在发送正文之前读取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043901/

相关文章:

heroku - Go 应用程序的依赖项未通过 Heroku 上的 godep 安装

xml-parsing - golang 中的多类型解码器

node.js - 通过 POST 登录不会产生有效 session

pointers - 如何在 Go 中引用具有相同功能的多个库并在它们之间内联切换

image - 如何从 Windows 剪贴板获取图像数据

dictionary - 结构体作为 Go map 中的键

windows - 在 Golang 中使用 Exec 时如何隐藏命令提示符窗口?

Golang 新的内存分配

golang : copy of context when copy is background

go - 并发读/写操作的 Golang 映射有多安全?