Files
demo/delegate.go
2025-03-14 18:50:49 +00:00

121 lines
3.4 KiB
Go

package goproxy
import (
"net/http"
"net/url"
)
// Delegate 代理委托接口
// 定义了代理处理请求的各个阶段的回调方法
type Delegate interface {
// Connect 连接事件
Connect(ctx *Context, rw http.ResponseWriter)
// Auth 认证事件
Auth(ctx *Context, rw http.ResponseWriter)
// BeforeRequest 请求前事件
BeforeRequest(ctx *Context)
// BeforeResponse 响应前事件
BeforeResponse(ctx *Context, resp *http.Response, err error)
// WebSocketSendMessage websocket发送消息拦截
WebSocketSendMessage(ctx *Context, messageType *int, p *[]byte)
// WebSocketReceiveMessage websocket接收消息拦截
WebSocketReceiveMessage(ctx *Context, messageType *int, p *[]byte)
// ParentProxy 获取上级代理
ParentProxy(req *http.Request) (*url.URL, error)
// ErrorLog 错误日志
ErrorLog(err error)
// Finish 完成事件
Finish(ctx *Context)
// 以下是反向代理相关的方法
// ResolveBackend 解析后端服务器
// 在反向代理模式下,根据请求确定应该转发到哪个后端服务器
ResolveBackend(req *http.Request) (string, error)
// ModifyRequest 修改请求
// 在反向代理模式下,可以修改发往后端服务器的请求
ModifyRequest(req *http.Request)
// ModifyResponse 修改响应
// 在反向代理模式下,可以修改来自后端服务器的响应
ModifyResponse(resp *http.Response) error
// HandleError 处理错误
// 在反向代理模式下,可以自定义错误处理逻辑
HandleError(rw http.ResponseWriter, req *http.Request, err error)
}
// DefaultDelegate 默认代理委托
type DefaultDelegate struct{}
// Connect 连接事件
func (d *DefaultDelegate) Connect(ctx *Context, rw http.ResponseWriter) {}
// Auth 认证事件
func (d *DefaultDelegate) Auth(ctx *Context, rw http.ResponseWriter) {}
// BeforeRequest 请求前事件
func (d *DefaultDelegate) BeforeRequest(ctx *Context) {}
// BeforeResponse 响应前事件
func (d *DefaultDelegate) BeforeResponse(ctx *Context, resp *http.Response, err error) {
// 默认实现不做任何处理
}
// ParentProxy 获取上级代理
func (d *DefaultDelegate) ParentProxy(req *http.Request) (*url.URL, error) {
// 默认实现不使用上级代理
return nil, nil
}
// WebSocketSendMessage websocket发送消息拦截
func (h *DefaultDelegate) WebSocketSendMessage(ctx *Context, messageType *int, payload *[]byte) {
// 默认实现不做任何处理
}
// WebSocketReceiveMessage websocket接收消息拦截
func (h *DefaultDelegate) WebSocketReceiveMessage(ctx *Context, messageType *int, payload *[]byte) {
// 默认实现不做任何处理
}
// ErrorLog 错误日志
func (d *DefaultDelegate) ErrorLog(err error) {
// 默认实现不做任何处理
}
// Finish 完成事件
func (d *DefaultDelegate) Finish(ctx *Context) {
// 默认实现不做任何处理
}
// ResolveBackend 解析后端服务器
func (d *DefaultDelegate) ResolveBackend(req *http.Request) (string, error) {
// 默认实现返回请求中的主机
return req.Host, nil
}
// ModifyRequest 修改请求
func (d *DefaultDelegate) ModifyRequest(req *http.Request) {
// 默认实现不做任何修改
}
// ModifyResponse 修改响应
func (d *DefaultDelegate) ModifyResponse(resp *http.Response) error {
// 默认实现不做任何修改
return nil
}
// HandleError 处理错误
func (d *DefaultDelegate) HandleError(rw http.ResponseWriter, req *http.Request, err error) {
http.Error(rw, err.Error(), http.StatusBadGateway)
}