package proxy 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) { // 默认实现返回502错误 http.Error(rw, err.Error(), http.StatusBadGateway) }