对于一个golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《不考虑 Http_PROXY 环境变量》,主要介绍了,希望对大家的知识积累
对于一个golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《不考虑 Http_PROXY 环境变量》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
问题内容我在互联网上读到,Go读取http_proxy
环境变量并为默认客户端设置代理。但是,它对我不起作用,我不知道为什么。
我使用的是 ubuntu 20.04,go 是 1.16,所以我升级到 1.17,但还是一样。
我有下面的程序,并在终端中执行: http_proxy="http://localhost:8000" go run req.go
我看到第一个 println
打印出正确的值,但未使用代理。
func main() {
fmt.println(os.getenv("http_proxy"))
client := &http.client{}
resp, err := client.get("http://localhost:8090/vm/1")
if err != nil {
log.fatal(err)
}
body, err := ioutil.readall(resp.body)
if err != nil {
log.fatal(err)
}
fmt.println(string(body))
}
如果我修改代码并显式设置代理,它就可以工作。
u, err := url.Parse("http://localhost:8000")
if err != nil {
log.Fatal(err)
}
client := &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(u)},
}
深入研究源代码后,我找到了主要原因和解决方法。这是评论行为,但相当深刻。来源 opensource.google/x/net/http/httpproxy/proxy.go line 118 和 line 181 正是负责的 if
。
问题是,当请求具有 url localhost 或 127.x.x.x 时,http_proxy
会被忽略。但您可以轻松地将自定义 uri 添加到 /etc/hosts
或 c:\windows\system32\drivers\etc\hosts
。
127.0.0.1 localserver.loc
然后所有请求都必须发送至 localserver.loc:8090
而不是 localhost:8090
。它会像一个魅力一样工作。
我假设您将 no_proxy 变量设置为“localhost”,这是受 defaulttransport 尊重的。
当使用http.proxyurl()显式设置代理时,无论no_proxy如何,都会使用该代理。
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~
--结束END--
本文标题: 不考虑 HTTP_PROXY 环境变量
本文链接: https://lsjlt.com/news/595775.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0