我在我的本地笔记本电脑上运行一个golang应用程序,它与kubernetes集群的服务api连接。为了允许我的笔记本电脑和Kubernetes集群上的服务api之间的通信,我已经设置了Socks5代理并能够通过CURL命令连接所有服务。
但是我无法在Golang应用程序中设置相同的代理。我已经尝试了各种选择
-
Settings env vars -尝试在操作系统级别,应用程序级别设置这3个,但不工作
- http_proxy
- https_proxy
- all_proxy
-
我正在运行Ubuntu Desktop 20。所以我也尝试在OS网络级别设置Socks代理。所有其他应用程序都使用代理,但golang不支持。
-
我尝试设置http。传输级别的配置,但它没有帮助。
func InsecureTLSTransport() *http.Transport {
// START - Only for Proxy - Dev Mode.
var dialer, err = proxy.SOCKS5("socks5", "<IP:port>", nil, proxy.Direct)
if err != nil {
fmt.Fprintln(os.Stderr, "can't connect to the proxy:", err)
}
return &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
Dial: dialer.Dial,
}
}
我希望socks5代理被我的golang应用程序在运行时使用。有什么建议吗?
在网络参数中应该使用tcp
而不是socks5
。
package main
import (
"fmt"
"golang.org/x/net/proxy"
)
func main() {
d, err := proxy.SOCKS5("tcp", "<IP:port>", nil, proxy.Direct) // <-- here
if err != nil {
fmt.Println(err)
return
}
c, err := d.Dial("tcp", "https://google.com")
if err != nil {
fmt.Println(err)
return
}
defer c.Close()
}