2016-08-16 6 views
0

私はこのようなリバースプロキシを持っています: RoundTripを使用していますが、このプロキシサーバーは正しく動作しません。
レスポンスを正しく読み取って変更する方法は?
と誰かがNewSingleHostReverseProxy経由でプロキシサーバーを作成します。 助けてください。ゴーランhttputil.NewSingleHostReverseProxyレスポンスを読み込んでレスポンスを変更する方法は?

package main 

import (
"bytes" 
"fmt" 
"io/ioutil" 
"net/http" 
"net/http/httputil" 
"net/url" 
) 

type transport struct { 
http.RoundTripper 
} 

func (t *transport) RoundTrip(req *http.Request) (resp *http.Response, err error) { 
    resp, err = t.RoundTripper.RoundTrip(req) 
    if err != nil { 
    return nil, err 
    } 

    b, err := ioutil.ReadAll(resp.Body) 
    if err != nil { 
    return nil, err 
    } 

    err = resp.Body.Close() 
    if err != nil { 
    return nil, err 
    } 

    b = bytes.Replace(b, []byte("Google"), []byte("GOOGLE"), -1) 
    body := ioutil.NopCloser(bytes.NewReader(b)) 
    resp.Body = body 
    return resp, nil 
} 

func sameHost(handler http.Handler) http.Handler { 
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
    r.Host = r.URL.Host 
    handler.ServeHTTP(w, r) 
}) 
} 

func main() { 
    u, _ := url.Parse("http://habrahabr.ru") 
    reverseProxy := httputil.NewSingleHostReverseProxy(u) 
    reverseProxy.Transport = &transport{http.DefaultTransport} 
    // wrap that proxy with our sameHost function 
    singleHosted := sameHost(reverseProxy) 
    http.ListenAndServe(":3000", singleHosted) 

}

答えて

0

HTTPをしようとしているとき://最も良い場所(例えば、あなたのhabrahabr.ru)のためにそこにHTTPSへのリダイレクトです://は、そのHTTPへの要求が何かを返します。 301 Moved Permanentlyのように、探しているコンテンツは見つかりません。また、HTTPSへの正しい後、サイトがコンテンツをロードするためにはJavaScriptを使用していないことを確認してください、あなたは簡単にカールすることによって、これを確認することができます。 curl localhost:3000

また間違っているかを判断するために、いくつかのログを使用しています。

関連する問題