用golang寫乙個proxy

2021-08-14 00:18:21 字數 1410 閱讀 6467

我複雜的網路環境中,proxy是個很有用的工具,我們可以通過proxy**幫我們完成網路流量的**。

這個proxy得先能接收請求,所以這裡先啟動乙個tcp的監聽,獲取請求

func (s *server) start() 

glog.infof("proxy listen in %s, waiting for connection...\n", s.addr)

for

go newconn(s,conn).serve()}}

當獲取的請求連線conn,交個serve方法去處理。

}gettunnelinfo是獲取連線資訊的,譬如訪問host、port、協議和請求頭之類的東西。

然後就可以建立遠端連線,通過net.dial(「tcp」, remote)建立。

最後就是簡單複製流量c.tunnel(remoteconn),具體**如下

_, err := io.copy(c.netconn, remoteconn)
這樣就可以通過它**流量

下面是例子

啟動服務

.

/goproxy--

addr

:9999--

log_dir=/tmp/goproxy--

v=10

到另外的機器上面執行

完整**如下

用proxy寫乙個遞迴來監聽巢狀物件甚至JSON

之前的這篇文章 其實那個監聽方式有個大bug,當不停的update 監聽物件以後就會導致記憶體洩漏。因為每次在呼叫get的時候都會生成乙個新的proxy,後來才知道是多傻。經過我一天時間的思考,用了乙個遞迴的方法去解決巢狀物件的監聽問題。下面是 傳遞兩個引數,乙個是object,乙個是proxy的h...

golang寫的乙個分頁控制項。

直接放 吧,基本不用改,直接用了。package components import math date 2019 04 01 description 分頁控制項 pages 分頁控制項 type pages struct startrecord 設定分頁查詢時起始位置 func p pages s...

用python寫乙個restful API

coding utf 8 package.module python實現的圖書的乙個restful api.restful api 一般模式 get select 從伺服器取出資源 一項或多項 post create 在伺服器新建乙個資源。put update 在伺服器更新資源 客戶端提供改變後的完...