http - Go http 客户端不会自动拆分正文
问题描述
我正在从 Go 流式传输 http,服务器按预期响应“Transfer-Encoding:chunked”。我被告知 Go 中的 http 客户端会自动从 http 响应中解块正文,删除 \r\n. 但在我的情况下,它不会自动删除,所以我必须使用 ChunkedReader 来阅读正文。
知道为什么 golang 不会自动分解我的身体吗?
编辑:这是http请求:
var transport = http.Transport{
Proxy: nil,
ExpectContinueTimeout: 0,
MaxResponseHeaderBytes: 16384}
var httpClient = http.Client{
Transport: &transport,
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
}}
bodyReader, bodyWriter := io.Pipe()
req, _ := http.NewRequest("GET", "http://x.x.x.x/stream", bodyReader)
response, err := httpClient.Do(req)
buffer := make([]byte, 2 << 15)
n, readErr = response.Body.Read(buffer) <-- should be dechunked body
读入缓冲区的数据不会被分块。知道为什么吗?
解决方案
我想通了为什么身体没有自动去块。这是因为 HTTP 响应是 HTTP/1.0。在这种情况下,golang 会忽略传输编码标头。
推荐阅读
- android - 如何在单个 recyclerView 中设置两个不同的适配器?
- matlab - 如何在 Matlab 中制作具有 30 种可区分颜色的颜色图
- flutter - FadeInImage.assetNetwork 小部件中的错误处理如何?
- c++ - 如何使用循环从另一个字符串创建一个没有空格的新字符串
- javascript - 如何在axios.get中调用functionA并返回值
- java - 如何在 MySQL 数据中将 jlist 作为单个块插入
- spring-boot - Spring Boot 中的自定义事件监听器
- javascript - 如何沿路径为 3D 对象设置动画,以使两个动画同步?
- android - “清单合并失败并出现多个错误,请参阅日志”错误
- java - Gson如何将已知大小的列表转换为多个字段