How to reuse HTTP response body in Golang

Took me a while to figure it out, but it seems that in golang you cant re-read from an http response.

I found here a way to solve it.

For debugging purposes, I had to be able to print the raw response as well as decoding it to json, to make sure that the json decoder was decoding properly

Basically you can reset the http response body "read state" by doing this:

    //perform http request
    resp, err := http.Post(url, "application/json; charset=utf-8", bytes.NewBuffer(requestData))
    defer resp.Body.Close()
    utils.CheckErr(err)

    // read the response body to a variable
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    bodyString := string(bodyBytes)
    //print raw response body for debugging purposes
    fmt.Println("\n\n", bodyString, "\n\n")

    //reset the response body to the original unread state
    resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))


    // Step 3
    oR := new(jsonResponse)
    json.NewDecoder(resp.Body).Decode(oR)
Show Comments