Skip to content

Instantly share code, notes, and snippets.

@antklim
Created November 19, 2020 05:48
Show Gist options
  • Save antklim/854df9db70b2dbecae70dd859dd8851a to your computer and use it in GitHub Desktop.
Save antklim/854df9db70b2dbecae70dd859dd8851a to your computer and use it in GitHub Desktop.
func remoteHandler(client HTTPClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
url := r.URL.Query().Get("url")
if url == "" {
url = "http://example.com/"
}
req, err := http.NewRequest(http.MethodPost, url, r.Body)
if err != nil {
log.Println(err)
response := NewErrorResponse(err)
writeBody(w, r, response, http.StatusInternalServerError)
return
}
res, err := client.Do(req)
if err != nil {
log.Println(err)
response := NewErrorResponse(err)
writeBody(w, r, response, http.StatusInternalServerError)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Println(err)
response := NewErrorResponse(err)
writeBody(w, r, response, http.StatusInternalServerError)
return
}
if res.StatusCode != http.StatusOK {
err := fmt.Errorf("remote call failed, returned status code %d", res.StatusCode)
log.Println(err)
response := NewErrorResponse(err)
writeBody(w, r, response, http.StatusInternalServerError)
return
}
writeRawBody(w, req, body, http.StatusOK)
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment