下面是一個用Go語言編寫的簡單的HTTP代理服務(wù)器示例:
packagemainimport("fmt""io""log""net""net/http")funchandleRequest(whttp.ResponseWriter,r*http.Request){//創(chuàng)建一個新的HTTP請求 req,err:=http.NewRequest(r.Method,r.URL.String(),r.Body)iferr!=nil{ http.Error(w,err.Error(),http.StatusInternalServerError)return }//復(fù)制原始請求的所有Header字段forkey,values:=ranger.Header{for_,value:=rangevalues{ req.Header.Add(key,value) } }//創(chuàng)建一個HTTP客戶端并發(fā)送新請求 client:=&http.Client{} resp,err:=client.Do(req)iferr!=nil{ http.Error(w,err.Error(),http.StatusInternalServerError)return }deferresp.Body.Close()//復(fù)制響應(yīng)的所有Header字段forkey,values:=rangeresp.Header{for_,value:=rangevalues{ w.Header().Add(key,value) } }//將響應(yīng)狀態(tài)碼寫入ResponseWriter w.WriteHeader(resp.StatusCode)//將響應(yīng)正文復(fù)制到ResponseWriter _,err=io.Copy(w,resp.Body)iferr!=nil{ log.Println(err) } }funcmain(){//設(shè)置代理監(jiān)聽地址 proxyAddr:=":8080"//創(chuàng)建一個HTTP代理服務(wù)器 proxy:=&http.Server{ Addr:proxyAddr, Handler:http.HandlerFunc(handleRequest), }//啟動代理服務(wù)器 fmt.Printf("StartingHTTPproxyserveron%s\n",proxyAddr) err:=proxy.ListenAndServe()iferr!=nil{ log.Fatal(err) } }
在上面的示例中,我們創(chuàng)建了一個HTTP代理服務(wù)器,它會接收來自客戶端的HTTP請求,并將其轉(zhuǎn)發(fā)給目標服務(wù)器。代理服務(wù)器將原始請求的所有Header字段復(fù)制到新請求中,然后使用HTTP客戶端發(fā)送新請求并獲取響應(yīng)。最后,代理服務(wù)器將響應(yīng)的所有Header字段復(fù)制到響應(yīng)中,并將響應(yīng)正文復(fù)制到客戶端的響應(yīng)中。
要使用此代理服務(wù)器,您可以將您的應(yīng)用程序或瀏覽器的HTTP代理設(shè)置為代理服務(wù)器的地址(例如:http://localhost:8080
)。然后,所有的HTTP請求將通過代理服務(wù)器進行中轉(zhuǎn)。