'In a Golang RoundTripper can I read a response Header?

I'm using Envoy as mTLS proxies on load-balanced servers. The Go client makes an HTTPS call to the load balancer which responds with a redirect to another server. I need to modify the port number in the response to use the Envoy port.

Is it possible to read Response.Header.Get("Location") and create a new response in order to change the port?

The docs say

// RoundTrip should not attempt to interpret the response.

It would look like

type EnvoyRoundTripper struct {
    PortMapper http.RoundTripper
}

func (ert EnvoyRoundTripper) RoundTrip(req *http.Request) (res *http.Response, e error) {
    res, e = ert.PortMapper.RoundTrip(req)

    if e == nil && res.StatusCode == http.StatusTemporaryRedirect {
        redirect := res.Header.Get("Location")
        // res = Create a new Response with a modified redirect
    }

    return
 }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source