zoukankan      html  css  js  c++  java
  • http内网转发

    package main
    
    import (
    	"io"
    	"log"
    	"net/http"
    	"strings"
    )
    
    func main() {
    	localHost := "127.0.0.1.8001"
    	targetHost := "127.0.0.1:80"
    	httpsServer(localHost, targetHost)
    
    	log.Fatalln("http server down!!!")
    }
    
    func httpsServer(addr string, remote_addr string) {
    
    	http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    		cli := &http.Client{}
    		body := make([]byte, 0)
    		n, err := io.ReadFull(req.Body, body)
    		if err != nil {
    			io.WriteString(w, "Request Data Error")
    			return
    		}
    		reqUrl := "http://" + remote_addr + req.URL.Path
    
    		req2, err := http.NewRequest(req.Method, reqUrl, strings.NewReader(string(body)))
    		if err != nil {
    			io.WriteString(w, "Request Error")
    			return
    		}
    		// set request content type
    		contentType := req.Header.Get("Content-Type")
    		req2.Header.Set("Content-Type", contentType)
    		// request
    		rep2, err := cli.Do(req2)
    		if err != nil {
    			io.WriteString(w, "Not Found!")
    			return
    		}
    		defer rep2.Body.Close()
    		n, err = io.ReadFull(rep2.Body, body)
    		if err != nil {
    			io.WriteString(w, "Request Error")
    			return
    		}
    		// set response header
    		for k, v := range rep2.Header {
    			w.Header().Set(k, v[0])
    		}
    		io.WriteString(w, string(body[:n]))
    	})
    	var err error = nil
    	err = http.ListenAndServe(":12307", nil)
    	if err != nil {
    		log.Fatal("server down!!!")
    	}
    }
    

      

  • 相关阅读:
    Method of Four Russians 学习笔记
    一道不知道哪里来的数论题
    ICPC2021银川 游记
    决策单调性优化dp学习笔记
    浅谈如何优美地实现线段树?
    2021 EC Final 2020 题解
    5.5 SYSU校内训练
    5.4 SYSU校内训练
    存储相关招聘信息-长期
    screen几个使用方法
  • 原文地址:https://www.cnblogs.com/saryli/p/11777534.html
Copyright © 2011-2022 走看看