Files
goproxy/cmd/http_to_https_proxy/main.go
2025-03-13 17:40:01 +08:00

106 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"flag"
"log"
"net/http"
"time"
"github.com/goproxy/internal/config"
"github.com/goproxy/internal/proxy"
)
// CustomDelegate 自定义委托用于HTTP到HTTPS代理
type CustomDelegate struct {
proxy.DefaultDelegate
targetHost string
targetPort string
}
// ModifyRequest 修改请求头
func (d *CustomDelegate) ModifyRequest(req *http.Request) {
log.Printf("收到请求: %s %s", req.Method, req.URL.String())
// 设置标准浏览器请求头
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/122.0.0.0 Safari/537.36")
req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
req.Header.Set("Connection", "keep-alive")
// 设置Host头
req.Host = d.targetHost
// 设置请求的URL方案为HTTPS
req.URL.Scheme = "https"
log.Printf("修改后的请求: %s %s", req.Method, req.URL.String())
log.Printf("修改后的请求头: %v", req.Header)
}
// ModifyResponse 修改响应头
func (d *CustomDelegate) ModifyResponse(resp *http.Response) error {
log.Printf("收到响应: %d %s", resp.StatusCode, resp.Status)
// 添加CORS头和代理标识
resp.Header.Set("Access-Control-Allow-Origin", "*")
resp.Header.Set("X-Proxied-By", "GoProxy")
return nil
}
// ResolveBackend 解析后端服务器
func (d *CustomDelegate) ResolveBackend(req *http.Request) (string, error) {
// 直接返回目标地址和端口
address := d.targetHost + ":" + d.targetPort
log.Printf("连接到目标服务器: %s", address)
return address, nil
}
func main() {
// 命令行参数
listenAddr := flag.String("listen", ":8080", "监听地址")
targetHost := flag.String("target", "avatars.githubusercontent.com", "目标站点主机名")
targetPort := flag.String("port", "443", "目标站点端口")
flag.Parse()
// 创建配置
cfg := config.DefaultConfig()
cfg.ReverseProxy = true // 启用反向代理模式
cfg.DecryptHTTPS = false // 不解密HTTPS流量避免TLS问题
cfg.IdleTimeout = 30 * time.Second // 连接空闲超时
cfg.AddXForwardedFor = true // 添加X-Forwarded-For头
cfg.AddXRealIP = true // 添加X-Real-IP头
cfg.SupportWebSocketUpgrade = true // 支持WebSocket升级
cfg.EnableCompression = false // 不启用压缩
cfg.EnableCORS = true // 启用CORS
cfg.EnableRetry = false // 关闭重试功能
cfg.EnableConnectionPool = false // 禁用连接池
// 创建自定义委托
delegate := &CustomDelegate{
targetHost: *targetHost,
targetPort: *targetPort,
}
// 创建代理实例
p := proxy.New(&proxy.Options{
Config: cfg,
Delegate: delegate,
})
// 创建HTTP服务器
server := &http.Server{
Addr: *listenAddr,
Handler: p,
}
// 启动HTTP服务器
log.Printf("HTTP->HTTPS代理启动监听地址: %s目标: https://%s:%s",
*listenAddr, *targetHost, *targetPort)
err := server.ListenAndServe()
if err != nil {
log.Fatalf("服务器启动失败: %v", err)
}
}