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语言,我们可以快速轻松地实现一个简单而高效的反向代理服务器。当然,这只是一个基础示例,您可以根据自己的需求进行扩展和定制。
您可能感兴趣的文章: