首页 > 解决方案 > 绕过代理

问题描述

如何绕过(忽略代理并不使用)Go 中的代理?

Excatly 我想 curl 或 http.Get 到一个网站并检查响应代码。

我有这个:

os.Setenv("HTTPS_PROXY", "")
os.Setenv("HTTP_PROXY", "")

//Make Request and Check for Response

resp, err := http.Get("http://interneIP:80")
if err != nil {
    log.Fatal(err)
}

fmt.Println("HTTP Response Code : " + strconv.Itoa(resp.StatusCode))

if resp.StatusCode != 200 {
    fmt.Println("Not OK")
} else {
    fmt.Println("HTTP OK")
}

但是无法解析 Setenv 并且使用其他方法我得到相同的错误,即无法解析到 url。那么我怎么能忽略我的代理呢?

标签: goproxy

解决方案


您可以创建自己的 http 往返传输,您可以看到往返从环境变量中拉入代理,当您想绕过时,您必须将其设置为 nil:

https://golang.org/pkg/net/http/#RoundTripper

以下是自定义 http 客户端设置的示例: https ://blog.abhi.host/blog/2016/02/27/golang-creating-https-connection-via/

默认传输文档还提到您可以使用 NO_PROXY env var 从默认代理中排除特定的 url/域,这可能适用于您的用例,例如

NO_PROXY="*.aventail.com,home.com,.seanet.com"

我猜想在任何情况下,您都需要在创建客户端之前设置环境变量,所以如果您有时想使用代理,有时不使用代理,也许只需让两个客户端使用不同的环境变量。


推荐阅读