mirror of
https://github.com/isboyjc/GoProxy.git
synced 2026-05-06 20:02:54 +08:00
- Introduced `.env.example` for environment variable configuration. - Updated `docker-compose.yml` to utilize environment variables for proxy settings. - Implemented proxy authentication with Basic Auth and geo-blocking based on country codes. - Added `GEO_FILTER.md` for documentation on geo-filtering configuration. - Enhanced logging to indicate authentication status and blocked countries during proxy server startup.
3.4 KiB
3.4 KiB
代理认证功能测试指南
本文档说明如何测试 GoProxy 的代理认证功能。
🔒 启用认证
使用 docker-compose
编辑 .env 文件:
PROXY_HOST=0.0.0.0
PROXY_AUTH_ENABLED=true
PROXY_AUTH_USERNAME=testuser
PROXY_AUTH_PASSWORD=testpass123
启动服务:
docker compose up -d
直接运行
设置环境变量后启动:
export PROXY_AUTH_ENABLED=true
export PROXY_AUTH_USERNAME=testuser
export PROXY_AUTH_PASSWORD=testpass123
go run .
🧪 测试认证功能
测试 1:无认证请求(应该失败)
curl -x http://127.0.0.1:7777 https://httpbin.org/ip -v
预期结果:
- HTTP 状态码:
407 Proxy Authentication Required - 响应头:
Proxy-Authenticate: Basic realm="GoProxy"
测试 2:错误的用户名/密码(应该失败)
curl -x http://wronguser:wrongpass@127.0.0.1:7777 https://httpbin.org/ip -v
预期结果:
- HTTP 状态码:
407 Proxy Authentication Required
测试 3:正确的认证(应该成功)
curl -x http://testuser:testpass123@127.0.0.1:7777 https://httpbin.org/ip
预期结果:
- HTTP 状态码:
200 OK - 返回代理的出口 IP 信息
测试 4:环境变量方式(应该成功)
export http_proxy=http://testuser:testpass123@127.0.0.1:7777
export https_proxy=http://testuser:testpass123@127.0.0.1:7777
curl https://httpbin.org/ip
测试 5:HTTPS CONNECT 隧道(应该成功)
curl -x http://testuser:testpass123@127.0.0.1:7776 https://www.google.com -I
🧩 多语言客户端示例
Python (requests)
import requests
proxies = {
'http': 'http://testuser:testpass123@127.0.0.1:7777',
'https': 'http://testuser:testpass123@127.0.0.1:7777',
}
response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)
Go
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
proxyURL, _ := url.Parse("http://testuser:testpass123@127.0.0.1:7777")
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyURL),
},
}
resp, err := client.Get("https://httpbin.org/ip")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
Node.js
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const proxyUrl = 'http://testuser:testpass123@127.0.0.1:7777';
const agent = new HttpsProxyAgent(proxyUrl);
axios.get('https://httpbin.org/ip', {
httpAgent: agent,
httpsAgent: agent
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
🔍 日志验证
启动时会输出认证状态:
proxy server listening on :7777 [随机轮换] [需认证 (用户: testuser)]
proxy server listening on :7776 [最低延迟] [需认证 (用户: testuser)]
无认证模式:
proxy server listening on :7777 [随机轮换] [无认证]
proxy server listening on :7776 [最低延迟] [无认证]
📝 注意事项
- 认证采用 HTTP Basic Auth 标准,兼容绝大多数客户端
- 密码存储为 SHA256 哈希,安全性高
- 认证失败不会删除代理或影响池子状态
- 两个端口(7776、7777)共享相同的认证配置
- 认证仅保护代理服务,WebUI 有独立的登录系统