Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Go http 客户端不会自动对正文进行分块》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!
我正在从 go 传输 http,服务器按预期响应“传输编码:分块”。我被告知 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 会忽略传输编码标头。
https://github.com/golang/go/issues/12785
今天关于《Go http 客户端不会自动对正文进行分块》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!