net/httphttputilflag
package main import ( "flag" "log" "net/http" "net/http/httputil" )
接下来,我们定义一个结构体来表示反向代理服务器,并为其添加一个方法来处理传入的HTTP请求。
type ProxyServer struct { targetURL string proxy *httputil.ReverseProxy } func (p *ProxyServer) handleRequest(w http.ResponseWriter, r *http.Request) { p.proxy.ServeHTTP(w, r) }
handleRequestReverseProxyServeHTTP
接下来,我们需要编写一个函数来创建反向代理服务器实例。
func NewProxyServer(targetURL string) *ProxyServer { target, err := url.Parse(targetURL) if err != nil { log.Fatal("Error parsing target URL:", err) } proxy := httputil.NewSingleHostReverseProxy(target) return &ProxyServer{ targetURL: targetURL, proxy: proxy, } }
NewProxyServerNewSingleHostReverseProxyProxyServer
main
func main() { targetURL := flag.String("target", "", "Target URL to proxy to") listenAddr := flag.String("addr", ":8080", "Address to listen on") flag.Parse() if *targetURL == "" { log.Fatal("No target URL specified") } proxy := NewProxyServer(*targetURL) log.Println("Proxying requests to:", *targetURL) log.Println("Listening on:", *listenAddr) http.HandleFunc("/", proxy.handleRequest) log.Fatal(http.ListenAndServe(*listenAddr, nil)) }
mainflag-target-addrhandleRequesthttp.ListenAndServe
现在,我们可以构建和运行我们的反向代理服务器了。
$ go build proxy.go $ ./proxy -target http://example.com
http://example.com
通过使用Go语言,我们可以快速轻松地实现一个简单而高效的反向代理服务器。当然,这只是一个基础示例,您可以根据自己的需求进行扩展和定制。
您可能感兴趣的文章: