- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用核心 net/http/httputil/ReverseProxy 库在 Go 中编写反向代理服务器。我已经使用了自定义 Director,我需要为传输定义自己的 RoundTrip 和 Dial。
我可以像这样使用自定义拨号:
transport := &http.Transport{
Dial: func(network, addr string) (net.Conn, error) {
lgr.Println("running custom magic below")
// custom magic
return net.Dial(network, addr)
},
}
res := &httputil.ReverseProxy{Director: director, Transport: transport}
return res
所以我创建了一个嵌入 http.Transport 的自定义传输,如下所示:
type customTransport struct {
http.Transport
}
func (t *customTransport) RoundTrip(req *http.Request) (*http.Response, error) {
res, err := http.DefaultTransport.RoundTrip(req)
lgr.Println("checking the response")
// check the response
return res, err
}
我尝试以这种方式使用它而不是默认的 Transport:
transport := &customTransport{http.Transport{
Dial: func(network, addr string) (net.Conn, error) {
lgr.Println("running custom magic below")
// custom magic
return net.Dial(network, addr)
},
}}
res := &httputil.ReverseProxy{Director: director, Transport: transport}
问题是,虽然我的自定义 RoundTrip 工作正常,但 Dial 现在停止工作并且自定义魔术不再完成。
当我在分配后立即记录 transport.Dial 时,我会在内存中看到它的地址。当我记录上面的函数在 res 中返回的 RevereProxy.Transport 时,我什至在那里看到相同的地址:
fmt.Printf("%#v", transport.Dial)
2016/02/18 12:11:48.401245 main.go:76: (func(string, string) (net.Conn, error))(0x4039a0)
fmt.Printf("%#v", proxy.Transport)
2016/02/18 12:11:48.401403 main.go:100: &main.customTransport{Transport:http.Transport{idleMu:sync.Mutex{state:0, sema:0x0}, wantIdle:false, idleConn:map[http.connectMethodKey][]*http.persistConn(nil), idleConnCh:map[http.connectMethodKey]chan *http.persistConn(nil), reqMu:sync.Mutex{state:0, sema:0x0}, reqCanceler:map[*http.Request]func()(nil), altMu:sync.RWMutex{w:sync.Mutex{state:0, sema:0x0}, writerSem:0x0, readerSem:0x0, readerCount:0, readerWait:0}, altProto:map[string]http.RoundTripper(nil), Proxy:(func(*http.Request) (*url.URL, error))(nil), Dial:(func(string, string) (net.Conn, error))(0x4039a0), DialTLS:(func(string, string) (net.Conn, error))(nil), TLSClientConfig:(*tls.Config)(nil), TLSHandshakeTimeout:0, DisableKeepAlives:false, DisableCompression:false, MaxIdleConnsPerHost:0, ResponseHeaderTimeout:0, ExpectContinueTimeout:0, TLSNextProto:map[string]func(string, *tls.Conn) http.RoundTripper(nil), nextProtoOnce:sync.Once{m:sync.Mutex{state:0, sema:0x0}, done:0x0}, h2transport:(*http.http2Transport)(nil)}}
无论如何,似乎调用了核心 net.Dial 方法而不是我的自定义 Dial,我真的不知道为什么。 :-( 任何想法将不胜感激!谢谢!
最佳答案
您正在定义自定义传输,但在 http.DefaultTransport
上调用 RoundTrip
。您需要在嵌入式传输上调用 RoundTrip
:
type customTransport struct {
*http.Transport
}
func (t *customTransport) RoundTrip(req *http.Request) (*http.Response, error) {
res, err := t.Transport.RoundTrip(req)
lgr.Println("checking the response")
// check the response
return res, err
}
关于go - 无法在 Go 中使用 httputil.ReverseProxy 同时使用自定义 RoundTrip 和 Dial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35480455/
我的客户正在使用 ReverseProxy 调用另一个服务,该服务最多需要 60 秒来响应我的请求。但我的客户只等了 30-35 秒。我需要将等待时间增加 60 秒。我该怎么做? 最佳答案 您可能正在
package main import ( "net/http" "net/http/httputil" "net/url" ) func main() { targe
这是 Apache 虚拟主机配置的一部分,匹配的传入请求被转发到 Apache Tomcat 服务器。所有客户端都必须发送客户端证书以对 App1 进行身份验证,但对于 App2 来说,它应该是可选的
问题 我正在尝试在 apache 服务器后面使用 laravel websockets 库设置实时环境。 Websocket 服务器在端口 6001 上运行(无法从外部访问)。 Apache VHos
我的主 Web 服务器中有反向代理,专用于特定的微服务,并处理转发到其适当微服务的请求。 func newTrimPrefixReverseProxy(target *url.URL, prefix
我正在使用 GOLANG 编写一个有特殊要求的 ReverseProxyReverseProxy 工作得很好。但我对特殊要求有疑问用户发送 Http Post 表单包含用户和电子邮件我想向帖子表单添加
任何能够将 Golang 的 ReverseProxy 功能与 Iris-Go 网络框架连接起来的人。我无法让它工作。我可以用普通的 net/http 连接它。 func MultiHostRever
我正在尝试对以下代码进行单元测试: func(h *Handler)Forward(w http.ResponseWriter, r *http.Request) { url, err :=
我基本上是在尝试编写一个反向代理服务器,这样当我 curl localhost:8080/get 时,它会将请求代理到 https://nghttp2.org/httpbin/get 。 Note:
我有网站 https://a-b-c.com和 https://www.x-y-z.com在端口上的反向代理后面运行 4444和 5555分别。 我将它们配置为使用 letsencrypt tls 证
我想我在我的头上,无法弄清楚如何调试或从这里去哪里?!任何指导将不胜感激! 问题: 开发环境:一切正常 生产:我收到“请求超时”错误 目标: 让“www.site.com/blog”显示来自“blog
我想构建一个 http 反向代理来检查 HTTP 正文,然后将 HTTP 请求发送到它的上游服务器。你怎么能在 go 中做到这一点? 初始尝试(如下)失败,因为 ReverseProxy 复制传入请求
我正在用 Go 编写自己的 ReverseProxy。ReverseProxy 应该连接我的 go-web 服务器和我的 apache2 网络服务器。但是当我在另一个 IP 地址上运行我的反向代理然后
我正在使用 httputil.ReverseProxy 将 Amazon s3 文件代理给我的客户。我想隐藏所有来自 Amazon 的 header - 是否可以在无需重新实现反向代理的情况下实现?
我正在尝试同时使用 gorilla mux 和 httputil.ReverseProxy,但是在尝试获取 mux.Vars 时它是空的。根据https://golang.org/src/net/ht
在 Go 中,我使用 NewSingleHostReverseProxy 来执行反向代理,但是我需要确认主机站点的 SSL 证书,以确保我拥有正确的安全证书......我应该如何做?我应该与处理程序或
我正在努力应对这样一种情况:我有多个应用程序要在单个 TorqueBox 实例上运行。当定义应用程序并将其部署到 config/torquebox.yml 中的根 (“/”) 上下文时,应用程序可以正
我正在使用核心 net/http/httputil/ReverseProxy 库在 Go 中编写反向代理服务器。我已经使用了自定义 Director,我需要为传输定义自己的 RoundTrip 和 D
我用 Go 编写的自己的 ReverseProxy 遇到了一些麻烦。我想将我的 Golang-Web 服务器与我的 Apache Web 服务器连接起来。我的 Apache Web 服务器也应该在 h
我正在尝试使用反向代理(在 Apache 上)为 Magento 设置 Varnish 缓存以获取 https 缓存。我无法让它工作。到目前为止,我在设置反向代理时得到了 ERR_TOO_MANY_R
我是一名优秀的程序员,十分优秀!