WhiteJust
WhiteJust

Reputation: 13

Proxy gateway send HTTP response back

I am looking to make a proxy gateway in Go. Almost done ! One thing is still missing : send the entire client response to the server request.

I've got my own HTTP handler :

func (f HttpHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if rurl, err := getOriginurl(r.RequestURI); err == nil {
        [...]
        client := &Http.Client{}
        r.URL = rurl
        r.RequestURI = ""
        resp, err := client.Do(r)
        if err == nil {
            for k, vs := range resp.Header {
                for _, v := range vs {
                    w.Header().Set(k, v)
                }
            }
            w.WriteHeader(resp.StatusCode)
            if responseData,err := ioutil.ReadAll(resp.Body); err == nil {
                w.Write(responseData)
            }
        }
    }
}

func getOriginurl(request string) *url.URL {
   {...}
   // Would return an *url.URL with : http://127.0.0.1:8080/{requestURI}
}

I am looking for a way to optimize the way to parse Client response to ResponseWriter. Actually my question would be : How to parse Response type to ResponseWriter exhaustively ?

Upvotes: 1

Views: 229

Answers (1)

Dolanor
Dolanor

Reputation: 820

You can use httputil.NewSingleHostReverseProxy instead of your own HTTP client logic.

httputil.NewSingleHostReverseProxy(rurl).ServeHTTP(w, r)

Upvotes: 1

Related Questions