欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速掌握Go語言正/反向代理

 更新時間:2022年11月08日 08:25:37   作者:博客猿馬甲哥  
這篇文章主要介紹了快速掌握Go語言正/反向代理的相關資料,需要的朋友可以參考下

先重溫一下什么叫反向代理,正向代理。

所謂正向,反向代理取決于代理的是出站請求,還是入站請求。

正向代理: 代理的出站請求, 客戶端能感知到代理程序,架構上距離客戶端更近。
反向代理: 代理的是入站請求,客戶端認為代理程序就是服務器,客戶端感知不到代理邏輯,架構上距離服務端更近。

前幾天利用golang實現(xiàn)了反向代理程序,引出了Host請求頭在反代中的關鍵作用。

對于proxy.com的請求,都被透明無感代理到A.com

package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func ReverseProxyHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Println("receive a request from:", r.RemoteAddr, r.Header)

	target := "www.baidu.com"
	director := func(req *http.Request) {
		req.URL.Scheme = "https"
		req.URL.Host = target
		req.Host = target
	}
	proxy := &httputil.ReverseProxy{Director: director}
	proxy.ServeHTTP(w, r)
}

func main() {
	fmt.Printf("Starting server at port 8080\n")
	if err := http.ListenAndServe(":8080", http.HandlerFunc(ReverseProxyHandler)); err != nil {
		log.Fatal(err)
	}
}

這幾天剛好遇到了一個正常代理的case, 簡單記錄一下。

package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func ProxyHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Printf("receive a request from {0}  {1}: \n", r.RemoteAddr, r.Header)
	if r.Host != "localhost:8080" {
		director := func(req *http.Request) {
			req.URL.Scheme = "http"
			req.URL.Host = r.Host
			req.Host = r.Host
		}
		proxy := &httputil.ReverseProxy{Director: director}
		proxy.ServeHTTP(w, r)
	} else {
		http.NotFound(w, r)
	}
}

func main() {
	if err := http.ListenAndServe(":8080", http.HandlerFunc(ProxyHandler)); err != nil {
		log.Fatal(err)
	}
}

其中要注意的就是,正向代理式要規(guī)避死循環(huán)代理。

使用該服務作為代理程序,將可以出站訪問任何地址。

使用時,針對httpclient設置proxy

//adding the proxy settings to the Transport object
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
	}

	//adding the Transport object to the http Client
	client := &http.Client{
		Transport: transport,
	}

下面使用curl指令演示(-x 后接代理地址)

curl -x 127.0.0.1:8080 www.baidu.com

GO快閃#

本文總結了go語言正反向代理的姿勢。

到此這篇關于快速掌握Go語言正/反向代理的文章就介紹到這了,更多相關Go語言正/反向代理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • GoLang?channel關閉狀態(tài)相關操作詳解

    GoLang?channel關閉狀態(tài)相關操作詳解

    Channel?和?goroutine?的結合是?Go?并發(fā)編程的大殺器。而?Channel?的實際應用也經常讓人眼前一亮,通過與?select,cancel,timer?等結合,它能實現(xiàn)各種各樣的功能。接下來,我們就要介紹GoLang?channel關閉狀態(tài)相關操作
    2022-10-10
  • 淺析go中Ticker,Timer和Tick的用法與區(qū)別

    淺析go中Ticker,Timer和Tick的用法與區(qū)別

    在go面試的時候,面試官經常會問time包的Ticker,Timer以及Tick的區(qū)別,一般在超時控制的時候用的比較多,今天就跟隨小編一起來詳細學一下這幾個的區(qū)別吧
    2023-10-10
  • GoLang中sql.Exec()報錯解決辦法

    GoLang中sql.Exec()報錯解決辦法

    這篇文章主要給大家介紹了關于GoLang中sql.Exec()報錯的解決辦法,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Go語言接口的嵌套的具體使用

    Go語言接口的嵌套的具體使用

    在Go語言中,不僅結構體與結構體之間可以嵌套,接口與接口間也可以通過嵌套創(chuàng)造出新的接口,本文主要介紹了Go語言接口的嵌套的具體使用,感興趣的可以了解一下
    2023-04-04
  • Go高級特性之并發(fā)處理http詳解

    Go高級特性之并發(fā)處理http詳解

    Golang?作為一種高效的編程語言,提供了多種方法來實現(xiàn)并發(fā)發(fā)送?HTTP?請求,本文將深入探討?Golang?中并發(fā)發(fā)送?HTTP?請求的最佳技術和實踐,希望對大家有所幫助
    2024-02-02
  • 用gin開發(fā)的golang項目三種開發(fā)模式方式

    用gin開發(fā)的golang項目三種開發(fā)模式方式

    這篇文章主要介紹了用gin開發(fā)的golang項目三種開發(fā)模式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Golang文件讀寫操作詳情

    Golang文件讀寫操作詳情

    這篇文章主要介紹了Golang文件讀寫操作詳情,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的一種,文件最主要的作用就是保存數(shù)據(jù),文件在程序中是以流的形式來操作的,更多詳細內容需要的朋友可以參考一下
    2022-07-07
  • 詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    在?Golang?中,context?包提供了創(chuàng)建和管理上下文的功能,那么在GO語言中如何基于現(xiàn)有的context創(chuàng)建新的context,下面小編就來和大家詳細聊聊
    2024-01-01
  • golang實現(xiàn)頁面靜態(tài)化操作的示例代碼

    golang實現(xiàn)頁面靜態(tài)化操作的示例代碼

    這篇文章主要介紹了golang實現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Go語言學習筆記之文件讀寫操作詳解

    Go語言學習筆記之文件讀寫操作詳解

    這篇文章主要為大家詳細介紹了Go語言對文件進行讀寫操作的方法,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-05-05

最新評論