HTTP プロキシ サーバを Go で書く方法

Goを用いてHTTPプロキシサーバーを作成する手順は次のとおりです。

1. 必要なライブラリをインポートします。
“`go
import (
“io”
“log”
“net”
“net/http”
)
“`

2. HTTPリクエストを処理し、リクエストをターゲットサーバに転送するためのハンドラ関数を記述します。
“`go
func handler(w http.ResponseWriter, r *http.Request) {
// ターゲットサーバへの接続を確立します。
destConn, err := net.Dial(“tcp”, r.Host)
if err != nil {
log.Println(err)
http.Error(w, “Failed to connect to destination server.”, http.StatusInternalServerError)
return
}
defer destConn.Close()
// リクエストをターゲットサーバに送信します。
err = r.Write(destConn)
if err != nil {
log.Println(err)
http.Error(w, “Failed to send request to destination server.”, http.StatusInternalServerError)
return
}
// ターゲットサーバのレスポンスをクライアントに返します。
_, err = io.Copy(w, destConn)
if err != nil {
log.Println(err)
http.Error(w, “Failed to forward response from destination server.”, http.StatusInternalServerError)
return
}
}
“`

3. HTTPサーバを作成し、リクエストをハンドラ関数に転送します。
“`go
func main() {
// HTTPサーバを作成します。
proxy := http.NewServeMux()
proxy.HandleFunc(“/”, handler)
// ポートでリッスンします。
log.Println(“Proxy server is running on port 8080…”)
log.Fatal(http.ListenAndServe(“:8080”, proxy))
}
“`

4. プログラムを実行すると、HTTPプロキシサーバが起動します。
“`shell
go run main.go
“`

これで、ブラウザや他のアプリケーションのプロキシサーバを “localhost:8080” に設定することで、このHTTPプロキシサーバを使用できるようになります。受信したリクエストをターゲットサーバに転送し、ターゲットサーバのレスポンスをクライアントに返します。

bannerAds