自定义 Go 程序中的代理使用
为了自动配置 Go 程序以使用代理,http.Client 类型提供了 ProxyFromEnvironment 方法。此方法检查 HTTP_PROXY 和 HTTPS_PROXY 环境变量以确定适当的代理 URL。
在提供的代码片段中:
<code class="go">tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr} resp, err := client.Get(url)</code>
创建的传输不考虑代理设置。要启用代理使用,请使用 ProxyFromEnvironment 方法:
<code class="go">var PTransport = &http.Transport{ Proxy: http.ProxyFromEnvironment, } client := http.Client{ Transport: PTransport, }</code>
ProxyFromEnvironment 返回从环境变量派生的代理 URL,优先考虑 HTTPS 请求的 HTTPS_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'
提供的代码示例对远程 API 执行 GET 请求,演示了代理设置的成功集成:
<code class="go">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)) }</code>
以上是如何配置 Go 程序以使用自定义代理?的详细内容。更多信息请关注PHP中文网其他相关文章!