我是这样的反向代理:
我使用RoundTrip,但这个代理服务器无法正常工作
如何正确阅读和修改回复?
有人通过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 :(得分:0)
如果您要访问http://以获取大多数优秀网站(例如您的habrahabr.ru),则会重定向到https://,因此对http的请求将返回301 Moved Permanently
之类的内容,您将会找不到您要找的内容。此外,在正确到https之后,请确保该网站不使用javascript加载内容,您可以通过curl轻松检查:
curl localhost:3000
还可以使用一些日志来确定错误。