In this recipe, we will develop a reverse proxy application. The idea is, by hitting http://localhost:3333 in a browser, all traffic will be forwarded to a configurable host and the responses will be forwarded to your browser. The end result should be https://www.golang.org rendered in a browser through our proxy application.
This can be combined with port forwarding and ssh tunnels in order to securely hit websites through an intermediate server. This recipe will build a reverse proxy from the ground up, but this functionality is also provided by the net/http/httputil package. Using this package, the incoming request can be modified by Director func(*http.Request) and the outgoing response can be modified by ModifyResponse func(*http.Response) error. In addition, there's support for buffering the response.