要使用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代理服務器。它將接收到的請求轉發到目標服務器,并將目標服務器的響應返回給客戶端。