当前位置: 首页 > 面试题库 >

使用自定义传输时,如何编程去使用代理?

哈和惬
2023-03-14
问题内容

如何根据代理环境变量自动编写使用代理的Go程序?

go get本身支持标准的代理环境变量,但是我说的是Go程序/代码本身。

这个博客说:

默认情况下,http.Client在处理任何http.Request之前会检查HTTP_PROXY和HTTPS_PROXY变量。

我试过了,但是对我的以下代码不起作用:

tr := &http.Transport{
    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
resp, err := client.Get(url)

问题答案:

您可以使用 http.ProxyFromEnvironment 方法

  var PTransport = & http.Transport { Proxy: http.ProxyFromEnvironment }
  client: = http.Client { Transport: PTransport }

ProxyFromEnvironment返回用于给定请求的代理的URL,如环境变量HTTP_PROXY,HTTPS_PROXY和NO_PROXY(或其小写版本)所指示。对于HTTPS请求,HTTPS_PROXY优先于HTTP_PROXY。

我试过下面的代码,它的工作原理,只需在终端中添加您的代理详细信息。

export http_proxy='http://user:password@prox-server:3128'
export https_proxy='http://user:password@prox-server:3128'
export HTTP_PROXY='http://user:password@prox-server:3128'
export HTTPS_PROXY='http://user:password@prox-server:3128'



package main



import (

  "fmt"

  "net/http"

  "io/ioutil"

)



func main() {



  var PTransport = & http.Transport {

    Proxy: http.ProxyFromEnvironment

  }

  client: = http.Client {

    Transport: PTransport

  }

  req, err: = http.NewRequest("GET", "https://jsonplaceholder.typicode.com/todos/1", nil)

  req.Header.Add("If-None-Match", `some value`)

  resp, err: = client.Do(req)

  if err != nil {

    panic(err)

  }

  defer resp.Body.Close()



  bodyBytes, err: = ioutil.ReadAll(resp.Body)

  if err != nil {

    panic(err)

  }



  bodyString: = string(bodyBytes)

  fmt.Printf("GET Response = %s \n", string(bodyString))





}


 类似资料:
  • 问题内容: 我在非标准位置安装了自己的OpenSSL(出于本示例的目的),并且我希望针对源代码编译Python 3.4时可以以此为基础进行构建。我试过的是这个(目录缩写) 我也尝试了用冒号分隔的路径。 然后,我运行并得到以下信息: 它正在寻找,但是最确定的是: 我不确定自己在做什么错,有什么想法吗? 问题答案: 经过大量的梳理,我设法弄清楚了。这是一堆环境变量…我想我可能做得有些过分,但这基本上可

  • 问题内容: 我正在尝试在Go中创建和使用自定义包。这可能很明显,但是我找不到很多信息。基本上,我在同一个文件夹中拥有这两个文件: mylib.go main.go 当我尝试时,出现此错误: 我尝试先运行,但似乎没有做任何事(没有生成文件,没有错误消息)。所以有什么想法我该怎么做? 问题答案: 首先,请务必阅读并理解“如何编写Go代码”文档。 实际答案取决于您“定制包装”的性质。 如果打算用于一般用

  • 我正在尝试在Go中创建和使用自定义包。这可能是非常明显的事情,但我找不到有关此的太多信息。基本上,我在同一个文件夹中有这两个文件: mylib。去 主要的去 当我尝试时,我得到这个错误: 我试着运行,但它似乎什么都没做(没有生成文件,没有错误消息)。你知道我该怎么做吗?

  • 问题内容: 我在Java项目中使用log4j。我想配置另一个文件,而不是log4j.properties。有人可以帮助我吗? 问题答案: 使用一次 您只需通过系统参数指定log4j文件的路径:

  • 自定义传输 Nest provides TCP and Redis as a built-in transport methods. It makes prototyping incredibly fast & easy, but sometimes you might want to use another type of transport, e.g. RabbitMQ messaging.

  • 根据Javers的文件:(参考:https://javers.org/documentation/repository-configuration/) JaVers在SQL数据库中创建四个表: jv_global_id域对象标识符, jv_commitJaVers提交元数据, jv_commit_property提交属性, jv_snapshot域对象快照。 我当前使用的Spring Boot J