httputil.ReverseProxy
ein Transport
Feld hat. Sie können damit die Antwort ändern. Zum Beispiel:
type transport struct {
http.RoundTripper
}
func (t *transport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
resp, err = t.RoundTripper.RoundTrip(req)
if err != nil {
return nil, err
}
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
err = resp.Body.Close()
if err != nil {
return nil, err
}
b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1)
body := ioutil.NopCloser(bytes.NewReader(b))
resp.Body = body
resp.ContentLength = int64(len(b))
resp.Header.Set("Content-Length", strconv.Itoa(len(b)))
return resp, nil
}
// ...
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Transport = &transport{http.DefaultTransport}
Spielplatz Beispiel für die ganze Sache: http://play.golang.org/p/b0S5CbCMrI.
* small * nit, 'b' kann mit' bytes.NewReader' umschlossen werden, was eine etwas kleinere Struktur ist. – JimB
Bearbeitet, danke. –