独享代理 Go 示例
这个示例基于 demo-sdk-dedicated-proxy 的 Go 目录整理,适合先确认 net/http 下的独享代理接入方式。
运行前准备
- 设置环境变量:
PRIVATE_HOSTPRIVATE_PORTPRIVATE_USERNAMEPRIVATE_PASSWORD- 可选:
PRIVATE_BASE - 可选:
TARGET_URL
示例代码
1package main23import (4"fmt"5"io"6"net/http"7"net/url"8"os"9"strings"10"time"11)1213func getenv(key, fallback string) string {14value := os.Getenv(key)15if value == "" {16return fallback17}18return value19}2021func main() {22host := getenv("PRIVATE_HOST", "s1.ip.16yun.cn")23port := getenv("PRIVATE_PORT", "39010")24user := os.Getenv("PRIVATE_USERNAME")25pass := os.Getenv("PRIVATE_PASSWORD")26target := getenv("TARGET_URL", "https://httpbin.org/ip")27base := strings.TrimRight(getenv("PRIVATE_BASE", "http://s1.ip.16yun.cn:887"), "/")2829if user == "" || pass == "" {30panic("缺少 PRIVATE_USERNAME/PRIVATE_PASSWORD")31}3233http.DefaultClient.Timeout = 15 * time.Second34for _, path := range []string{"current-ip", "switch-ip", "update"} {35url := fmt.Sprintf("%s/simple/%s?username=%s&password=%s", base, path, user, pass)36resp, err := http.Get(url)37if err != nil {38fmt.Println(path, "error:", err)39continue40}41body, _ := io.ReadAll(resp.Body)42resp.Body.Close()43fmt.Println(path, resp.Status, string(body))44}4546proxyURL, _ := url.Parse(fmt.Sprintf("http://%s:%s@%s:%s", user, pass, host, port))47client := &http.Client{48Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},49Timeout: 15 * time.Second,50}5152resp, err := client.Get(target)53if err != nil {54panic(err)55}56defer resp.Body.Close()57fmt.Println(resp.Status)58}
适合什么情况
- 你用
net/http写最小验证程序 - 你要先确认环境变量和代理地址是否正确
- 你准备把独享代理接到 Go 服务或脚本里