package main
import (
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
target := &url.URL{Scheme: "http", Host: "www.google.com"}
proxy := httputil.NewSingleHostReverseProxy(target)
http.Handle("/google", proxy)
http.ListenAndServe(":8099", nil)
}
反向代理是可行的。如何获得响应主体?
httputil.ReverseProxy
有一个Transport
领域。您可以使用它来修改响应。例如:
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("server"), []byte("schmerver"), -1)
body := ioutil.NopCloser(bytes.NewReader(b))
resp.Body = body
resp.ContentLength = int64(len(b))
resp.Header.Set("Content-Length", strconv.Itoa(len(b)))
return resp, nil
}
// ...
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Transport = &transport{http.DefaultTransport}
整个场景的操场示例:http :
//play.golang.org/p/b0S5CbCMrI。
反向代理是可行的。我怎样才能得到响应体?
我正在编写一些中间件,我需要能够记录响应主体内容,即使目标使用TLS加密。 我有一个处理程序链,在其中我将响应体存储在中间缓冲区中,这样我就可以多次读取它。这是基于icza(Golang读取请求体)提供的优秀示例。 在我的handler func中,我正在这样做。。。。 我发现,当连接到不使用TLS的目的地时,我得到了可读的输出,但是当连接到使用TLS的目的地时,响应主体似乎仍然是加密的,尽管复制
Axios 0.17.1 响应的console.log为 {data:“{”error“:”name必须输入多个…null [“ispipe”:protected]=>null}}“,状态:203,statustext:”非权威信息“,标题:{…},配置:{…},…}配置:{adapter:f,转换请求:{…},转换响应:{…},超时:0,xsrfcookiename:”xsrf-token“,…
我创建了一个反向代理,如下所示: 并从main调用它: 它在客户端可以正常工作,但是我想阅读代理的响应,我怎么做?
问题内容: 我在Go中编写自己的ReverseProxy。ReverseProxy应该连接我的go-webserver和apache2 webserver。但是,当我在另一个IP地址上运行反向代理时,然后在我的Apache2 Web服务器上,当反向代理将请求发送到apache时,我的apache-logfile中出现以下错误。 我的反向代理和apache-webserver在https上运行。 这
我正在使用volley库用于Android中的网络调用,并使用jsonObject用于从服务器发送和获取值。 在我的例子中,如果我发送了正确的值,它将返回正确的json对象,但是如果我向服务器发送了错误的输入,它将返回401作为带有错误消息的请求头和响应体。但在onResponse success方法中没有显示这一点。 有谁能帮我克服这个问题吗?