package deconnector import ( "bufio" "fmt" "net" "net/http" "net/url" ) func (d *Deconnector) forwardHTTP(clientConn net.Conn, req *http.Request, upstreamURL *url.URL) { upstreamConn, err := d.dialer.Dial() if err != nil { d.app.Logger().WithError(err).Error("upstream dial failed") fmt.Fprintf(clientConn, "HTTP/1.1 502 Bad Gateway\r\n\r\n") return } defer upstreamConn.Close() if err := req.WriteProxy(upstreamConn); err != nil { d.app.Logger().WithError(err).Error("failed to write request") return } resp, err := http.ReadResponse(bufio.NewReader(upstreamConn), req) if err != nil { d.app.Logger().WithError(err).Error("failed to read response") return } defer resp.Body.Close() resp.Write(clientConn) }