Прокси-шлюз отправляет ответ HTTP обратно - PullRequest
1 голос
/ 26 февраля 2020

Я хочу создать прокси-шлюз в Go. Почти готово ! Одна вещь все еще отсутствует: отправьте полный ответ клиента на запрос сервера.

У меня есть собственный обработчик HTTP:

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}
}

Я ищу способ оптимизировать способ проанализировать ответ клиента на ResponseWriter. На самом деле мой вопрос будет: Как полностью проанализировать тип ответа для ResponseWriter?

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете использовать httputil.NewSingleHostReverseProxy вместо своей собственной HTTP-логи клиента c.

httputil.NewSingleHostReverseProxy(rurl).ServeHTTP(w, r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...