57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/darkit/goproxy"
|
|
)
|
|
|
|
// CustomDelegate 自定义委托
|
|
type CustomDelegate struct {
|
|
goproxy.DefaultDelegate
|
|
}
|
|
|
|
// BeforeRequest 请求前事件
|
|
func (d *CustomDelegate) BeforeRequest(ctx *goproxy.Context) {
|
|
log.Printf("收到请求: %s %s\n", ctx.Req.Method, ctx.Req.URL.String())
|
|
log.Printf("请求头: %v\n", ctx.Req.Header)
|
|
}
|
|
|
|
// BeforeResponse 响应前事件
|
|
func (d *CustomDelegate) BeforeResponse(ctx *goproxy.Context, resp *http.Response, err error) {
|
|
if err != nil {
|
|
log.Printf("响应错误: %v\n", err)
|
|
return
|
|
}
|
|
log.Printf("收到响应: %d %s\n", resp.StatusCode, resp.Status)
|
|
log.Printf("响应头: %v\n", resp.Header)
|
|
}
|
|
|
|
// AfterResponse 响应后事件
|
|
func (d *CustomDelegate) AfterResponse(ctx *goproxy.Context, resp *http.Response) {
|
|
log.Printf("请求完成: %s %s, 耗时: %v\n",
|
|
ctx.Req.Method,
|
|
ctx.Req.URL.String(),
|
|
time.Since(ctx.StartTime))
|
|
}
|
|
|
|
func main() {
|
|
// 创建自定义委托
|
|
delegate := &CustomDelegate{}
|
|
|
|
// 创建代理实例
|
|
proxy := goproxy.NewProxy(
|
|
goproxy.WithDelegate(delegate),
|
|
goproxy.WithRequestTimeout(30*time.Second),
|
|
goproxy.WithIdleTimeout(60*time.Second),
|
|
)
|
|
|
|
// 启动代理服务器
|
|
log.Println("自定义委托代理服务器启动在 :8080")
|
|
if err := http.ListenAndServe(":8080", proxy); err != nil {
|
|
log.Fatalf("代理服务器启动失败: %v", err)
|
|
}
|
|
}
|