跳到正文
本中心目录
代码示例

Go 代理接入示例

使用 net/http、环境变量、Transport 和请求超时完成 HTTP 代理访问。

只只HTTP技术团队维护更新于 2026年9月20日

Go 标准库可以通过 http.Transport.Proxy 使用 HTTP 代理。账密网关固定为 us.zzhttp.com:7878,代码从环境读取凭据。

Go

Go
package main

import (
  "fmt"
  "io"
  "net/http"
  "net/url"
  "os"
  "time"
)

func main() {
  username, password := os.Getenv("PROXY_USERNAME"), os.Getenv("PROXY_PASSWORD")
  if username == "" || password == "" { panic("代理凭据缺失") }
  proxyURL, err := url.Parse("http://us.zzhttp.com:7878")
  if err != nil { panic(err) }
  proxyURL.User = url.UserPassword(username, password)

  transport := &http.Transport{Proxy: http.ProxyURL(proxyURL)}
  client := &http.Client{Transport: transport, Timeout: 30 * time.Second}
  response, err := client.Get("https://ipinfo.io/json")
  if err != nil { panic(err) }
  defer response.Body.Close()
  fmt.Println(response.StatusCode)
  if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }
}

配置

  • 使用 url.Parse 解析固定网关,再从 PROXY_USERNAME 和 PROXY_PASSWORD 注入凭据。
  • 不要把解析后的 URL 输出到日志。

连接

  • 设置客户端整体超时。
  • 响应结束后关闭 Body。

复用

  • 相同代理身份复用 Transport。
  • 配置变化时关闭空闲连接。

错误处理

  • 区分配置解析、网络错误和目标状态。
  • 生产代码为 DNS、拨号和 TLS 增加分层指标。

这篇内容解决了你的问题吗?

反馈只用于改进公开文档,不会提交账号或请求信息。