go - 绕过代理
问题描述
如何绕过(忽略代理并不使用)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。那么我怎么能忽略我的代理呢?
解决方案
您可以创建自己的 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"
我猜想在任何情况下,您都需要在创建客户端之前设置环境变量,所以如果您有时想使用代理,有时不使用代理,也许只需让两个客户端使用不同的环境变量。
推荐阅读
- javascript - React 在控制台中显示值但不渲染它们
- c++ - 将数组值传递给结构构造函数
- python - python中矩阵指数的分解:特征向量矩阵不匹配
- r - 使用 dplyr 计算 R 数据帧中的成对差异
- python-3.x - 将字符串拆分为整数列表
- c++ - 如何清除 int 的输出缓冲区
- jenkins - Jenkins:Cobertura 插件找不到覆盖率报告
- laravel - laravel中的分页自引用关系
- reactjs - Module not found: Can't resolve '@emotion/react'
- shell - 将一个文件夹 tar 到另一个目录