go 語言實現http請求轉寄

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ("bytes""flag""fmt""io""log""net""os""strings""time")func main() {var srcHost, agencyHost stringflag.StringVar(&srcHost, "srcHost", "", "srcHost")flag.StringVar(&agencyHost, "agencyHost", "", "agencyHost")flag.Parse()if srcHost == "" || agencyHost == "" {fmt.Fprintf(os.Stderr, "Fatal error: %s", "參數為空白")os.Exit(1)}//建立socket,監聽連接埠netListen, err := net.Listen("tcp", srcHost)CheckError(err)defer netListen.Close()Log("Waiting for clients")for {conn, err := netListen.Accept()//如果沒有請求就一直等待if err != nil {continue}if conn != nil {Log(conn.RemoteAddr().String(), " tcp connect success")go handleConnection(conn, agencyHost) //go 可以實現非同步並發請求}}}//處理串連func handleConnection(conn net.Conn, agencyHost string) {time.Sleep(10 * time.Millisecond)buffer := ReceiveData(conn)if len(buffer) > 1 {arr := strings.Split(string(buffer), "\r\n")if len(arr) > 1 {arr[1] = "Host: " + agencyHostnewstr := strings.Join(arr, "\r\n")SendAgencyHost([]byte(newstr), agencyHost, conn)}}conn.Close()}func SendAgencyHost(data []byte, host string, baseconn net.Conn) {conn, _ := net.Dial("tcp", host)conn.Write(data)time.Sleep(10 * time.Millisecond)bufferHead := ReceiveData(conn)time.Sleep(10 * time.Millisecond)bufferBody := ReceiveData(conn)var buf bytes.Bufferbuf.Write(bufferHead)buf.Write(bufferBody)baseconn.Write(buf.Bytes())conn.Close()}//接收資料統一方法func ReceiveData(conn net.Conn) []byte {var buf bytes.Bufferbuffer := make([]byte, 8192)for {sizenew, err := conn.Read(buffer)buf.Write(buffer[:sizenew])if err == io.EOF || sizenew < 8192 {break}}return buf.Bytes()}//列印資訊統一方法func Log(v ...interface{}) {log.Println(v...)}//執行錯誤處理方法func CheckError(err error) {if err != nil {fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())os.Exit(1)}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.