这个示例基于 demo-sdk-dedicated-proxy 的 Go 目录整理,适合先确认 net/http 下的独享代理接入方式。
运行前准备
- 设置环境变量:
PRIVATE_HOSTPRIVATE_PORTPRIVATE_USERNAMEPRIVATE_PASSWORD- 可选:
PRIVATE_BASE - 可选:
TARGET_URL
示例代码
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"strings"
"time"
)
func getenv(key, fallback string) string {
value := os.Getenv(key)
if value == "" {
return fallback
}
return value
}
func main() {
host := getenv("PRIVATE_HOST", "s1.ip.16yun.cn")
port := getenv("PRIVATE_PORT", "39010")
user := os.Getenv("PRIVATE_USERNAME")
pass := os.Getenv("PRIVATE_PASSWORD")
target := getenv("TARGET_URL", "https://httpbin.org/ip")
base := strings.TrimRight(getenv("PRIVATE_BASE", "http://s1.ip.16yun.cn:887"), "/")
if user == "" || pass == "" {
panic("缺少 PRIVATE_USERNAME/PRIVATE_PASSWORD")
}
http.DefaultClient.Timeout = 15 * time.Second
for _, path := range []string{"current-ip", "switch-ip", "update"} {
url := fmt.Sprintf("%s/simple/%s?username=%s&password=%s", base, path, user, pass)
resp, err := http.Get(url)
if err != nil {
fmt.Println(path, "error:", err)
continue
}
body, _ := io.ReadAll(resp.Body)
resp.Body.Close()
fmt.Println(path, resp.Status, string(body))
}
proxyURL, _ := url.Parse(fmt.Sprintf("http://%s:%s@%s:%s", user, pass, host, port))
client := &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
Timeout: 15 * time.Second,
}
resp, err := client.Get(target)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}
适合什么情况
- 你用
net/http写最小验证程序 - 你要先确认环境变量和代理地址是否正确
- 你准备把独享代理接到 Go 服务或脚本里