Go 接入
使用已分配的静态端点发送请求。示例从进程环境读取连接信息,默认通过 HTTP 代理服务器访问 HTTPS 目标,不包含提取 IP 或轮换逻辑。
接入准备
在运行程序的终端、容器或部署平台中设置 PROXY_HOST、PROXY_PORT、PROXY_USERNAME、PROXY_PASSWORD。值来自后台当前连接信息;端口必须与协议对应。不要将实际密码提交到代码仓库、输出到日志或放入前端代码。
运行条件与依赖
使用当前受支持的 Go 版本,仅需标准库。将代码保存为 proxy_example.go。
sh
go run proxy_example.go配置步骤
go
package main
import (
"context"
"fmt"
"io"
"net"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"
)
func required(name string) string {
value := os.Getenv(name)
if value == "" {
fmt.Fprintln(os.Stderr, "Missing environment variable:", name)
os.Exit(1)
}
return value
}
func main() {
host := strings.Trim(required("PROXY_HOST"), "[]")
port := required("PROXY_PORT")
number, err := strconv.Atoi(port)
if err != nil || number < 1 || number > 65535 {
fmt.Fprintln(os.Stderr, "Invalid PROXY_PORT")
os.Exit(1)
}
scheme := os.Getenv("PROXY_SCHEME")
if scheme == "" { scheme = "http" }
if scheme != "http" && scheme != "socks5h" {
fmt.Fprintln(os.Stderr, "PROXY_SCHEME must be http or socks5h")
os.Exit(1)
}
endpoint := &url.URL{
Scheme: scheme,
Host: net.JoinHostPort(host, port),
User: url.UserPassword(required("PROXY_USERNAME"), required("PROXY_PASSWORD")),
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(endpoint)
defer transport.CloseIdleConnections()
client := &http.Client{Transport: transport, Timeout: 30 * time.Second}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
request, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://ip123.in/ip.json", nil)
if err != nil { fmt.Fprintln(os.Stderr, "Invalid request"); os.Exit(1) }
response, err := client.Do(request)
if err != nil { fmt.Fprintln(os.Stderr, "Proxy request failed; check network and credentials"); os.Exit(1) }
defer response.Body.Close()
if response.StatusCode < 200 || response.StatusCode >= 300 {
fmt.Fprintln(os.Stderr, "HTTP status:", response.StatusCode)
os.Exit(1)
}
body, err := io.ReadAll(io.LimitReader(response.Body, 1<<20))
if err != nil { fmt.Fprintln(os.Stderr, "Cannot read response"); os.Exit(1) }
fmt.Println(string(body))
}默认 PROXY_SCHEME=http。如需 SOCKS5,改为 socks5h 并使用 SOCKS5 对应端口,让目标域名在远端解析。切换协议不改变已分配的静态出口。
遇到问题
如果示例成功、业务代码失败,检查真正发起请求的进程、SDK 代理 IP 配置、超时和重试策略。不要通过关闭 TLS 证书校验解决连接错误。示例只输出查询结果或不含凭据的错误;排查日志也应脱敏。详见常见问题。