How to turn off chunked encoding in golang

PHPz
Release: 2023-04-04 17:21:01
Original
719 people have browsed it

When using golang for http requests, if the server returns a chunked-encoded response, you need to pay attention to turning off chunked encoding when reading the response body, otherwise incomplete data will be read.

Chunked encoding is a transmission method that divides data into multiple chunks and sends them. Each chunk contains the length of the chunk of data. After all blocks have been transmitted, a block of length 0 is sent to indicate the end of the transmission.

In golang, commonly used libraries also support chunked encoded http responses. For example, when sending a request using the http package of the standard library, if the server returns a chunked-encoded response, the response body will be automatically processed and read. We only need to read the response body:

resp, err := http.Get("http://example.com")
if err != nil {
    // handle error
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    // handle error
}
Copy after login

However, in some cases, chunked encoding needs to be turned off manually. For example, an error is encountered when reading the response body, or it is necessary to read part of the response body, pause, perform some processing, and then continue reading.

In order to manually turn off chunked encoding, we can use the TransferEncoding field in the net/http package. When the TransferEncoding field in the request or response contains "chunked", it means that chunked encoding is used. We can set the TransferEncoding field to empty to turn off chunked encoding:

req, err := http.NewRequest(http.MethodGet, "http://example.com", nil)
if err != nil {
    // handle error
}

resp, err := http.DefaultClient.Do(req)
if err != nil {
    // handle error
}
defer resp.Body.Close()

// check if the response is chunked
if resp.TransferEncoding != nil && len(resp.TransferEncoding) > 0 && resp.TransferEncoding[0] == "chunked" {
    resp.TransferEncoding = nil
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    // handle error
}
Copy after login

In the above code, we first check whether the response uses chunked encoding. If so, set the TransferEncoding field to empty and then read the response body.

To summarize, when processing chunked encoded http responses, you need to pay attention to turning off chunked encoding. Chunked encoding can be turned off manually using the TransferEncoding field.

The above is the detailed content of How to turn off chunked encoding in golang. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!