成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

golang反向代理無(wú)法訪(fǎng)問(wèn)的解決方案

這篇文章主要為大家詳細(xì)介紹了golang反向代理無(wú)法訪(fǎng)問(wèn)的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

永川網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,永川網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為永川近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的永川做網(wǎng)站的公司定做!

golang反向代理無(wú)法訪(fǎng)問(wèn)的解決方案

首先,我們來(lái)看一下如何得到一個(gè)反向代理結(jié)構(gòu)體

func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy {
	targetQuery := target.RawQuery
	director := func(req *http.Request) {
		req.URL.Scheme = target.Scheme
		req.URL.Host = target.Host
		req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path)
		if targetQuery == "" || req.URL.RawQuery == "" {
			req.URL.RawQuery = targetQuery + req.URL.RawQuery
		} else {
			req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
		}
		if _, ok := req.Header["User-Agent"]; !ok {
			req.Header.Set("User-Agent", "")
		}
	}
	return &ReverseProxy{Director: director}
}

NewSingleHostReverseProxy用了一個(gè)閉包作為Director新建了一個(gè)ReverseProxy結(jié)構(gòu)體,director就是它為我們默認(rèn)實(shí)現(xiàn)的代理函數(shù)。在這個(gè)函數(shù)中重寫(xiě)了請(qǐng)求URL的協(xié)議、Host和Path等。但是它沒(méi)有重寫(xiě)req.Host,這也就導(dǎo)致了我們的反向代理只能在本地進(jìn)行代理。所以我們只要對(duì)這個(gè)函數(shù)進(jìn)行修改就可以了,有兩種方式可以修改。

修改方法:

1、我們可以將NewSingleHostReverseProxy函數(shù)拷貝出來(lái)進(jìn)行修改,反正這個(gè)函數(shù)也不復(fù)雜,然后在需要用到反向代理結(jié)構(gòu)體的地方用我們自定義的函數(shù)新建代理器。

func NewProxy(target *url.URL) *httputil.ReverseProxy {
	targetQuery := target.RawQuery
	director := func(req *http.Request) {
		req.Host = target.Host // -- 加入這句 --
		req.URL.Scheme = target.Scheme
		req.URL.Host = target.Host
		req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path)
		if targetQuery == "" || req.URL.RawQuery == "" {
			req.URL.RawQuery = targetQuery + req.URL.RawQuery
		} else {
			req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
		}
		if _, ok := req.Header["User-Agent"]; !ok {
			// explicitly disable User-Agent so it's not set to default value
			req.Header.Set("User-Agent", "")
		}
	}
	return &httputil.ReverseProxy{Director: director}
}

然后將httputil.NewSingleHostReverseProxy(u)替換成NewProxy(u)就可以代理到其他域名了。

2、自定義Director函數(shù)。我們還是用NewSingleHostReverseProxy函數(shù)新建代理器,然后自定義一個(gè)Director函數(shù)給它。

p := httputil.NewSingleHostReverseProxy(u)
d := p.Director
p.Director = func(r *http.Request) {
	d(r)
	r.Host = u.Host
}

關(guān)于golang反向代理無(wú)法訪(fǎng)問(wèn)的解決方案就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過(guò)小編可以保證其準(zhǔn)確性是絕對(duì)沒(méi)問(wèn)題的。希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

分享題目:golang反向代理無(wú)法訪(fǎng)問(wèn)的解決方案
網(wǎng)址分享:http://jinyejixie.com/article12/ggsggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)站排名、品牌網(wǎng)站制作、全網(wǎng)營(yíng)銷(xiāo)推廣響應(yīng)式網(wǎng)站、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
化州市| 昆明市| 宜丰县| 西城区| 镇江市| 曲靖市| 古浪县| 新蔡县| 黄梅县| 灵宝市| 万荣县| 福贡县| 安溪县| 洱源县| 华安县| 凭祥市| 桐乡市| 华蓥市| 磴口县| 都匀市| 伊通| 南汇区| 康乐县| 瑞昌市| 江口县| 汉沽区| 高雄县| 邯郸市| 广平县| 灵台县| 申扎县| 通许县| 福鼎市| 清徐县| 家居| 太原市| 白朗县| 蓝山县| 北票市| 丰台区| 衡东县|