使用 Go 标准库中的 net/http 包来实现 HTTP 请求的代理。
以下是一个简单的示例,它将从本地的 localhost:8080 端口接收所有传入的 HTTP 请求,并将它们转发到远程服务器 example.com 上:
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
remoteURL, err := url.Parse("<http://example.com>")
if err != nil {
log.Fatalf("Failed to parse remote URL: %v", err)
}
proxy := httputil.NewSingleHostReverseProxy(remoteURL)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
proxy.ServeHTTP(w, r)
})
log.Println("Proxy listening on localhost:8080...")
if err := http.ListenAndServe("localhost:8080", nil); err != nil {
log.Fatalf("Failed to start proxy: %v", err)
}
}
使用 httputil.NewSingleHostReverseProxy() 创建了一个反向代理对象,然后将其绑定到根路径的 HTTP 处理函数中。当有请求到达时,处理函数会将其转发到远程服务器上,并将其响应返回给客户端。
您可以根据需要修改该示例,例如更改远程服务器的 URL、更改端口号、添加更多的路由规则等等。