• Go net/http代理


    share/share.go

    /******
    ** @创建时间 : 2020/5/25 20:26
    ** @作者 : SongZhiBin
    ******/
    package share
    
    import (
    	"fmt"
    	"net/http"
    	"net/http/httputil"
    	"net/url"
    	"os"
    )
    
    // ========= global variable
    var Config conf
    var LogOut *os.File
    
    // ========== Struct
    type conf struct {
    	TargetIP   string
    	TargetPort int
    	LocalPort  int
    }
    
    // 转发中间件
    func (c *conf) Forward(w http.ResponseWriter, r *http.Request) {
    	u, _ := url.Parse(fmt.Sprintf("http://%s:%d/", Config.TargetIP, Config.TargetPort))
    	proxy := httputil.NewSingleHostReverseProxy(u)
    	proxy.ServeHTTP(w, r)
    }
    

      

    config.txt

    [target]
    TargetIP = 127.0.0.1
    TargetPort = 8080
    LocalPort = 80
    

     

    run.go 

    /******
    ** @创建时间 : 2020/5/25 19:09
    ** @作者 : SongZhiBin
    ******/
    package main
    
    import (
    	"fmt"
    	"gopkg.in/ini.v1"
    	"net/http"
    	"os"
    )
    import "Songzhibin/HttpAgent/share"
    
    func main() {
    	// 读取配置文件
    	share.LogOut = os.Stdout
    	cfg, err := ini.Load("./config.txt")
    	if err != nil {
    		// 读取失败,使用默认配置
    		share.Config.TargetIP = "127.0.0.1"
    		share.Config.TargetPort = 80
    		share.Config.LocalPort = 80
    		fmt.Fprintf(share.LogOut, "使用默认配置->TargetIP:%s TargetPort:%d
    ", share.Config.TargetIP, share.Config.TargetPort)
    	}
    
    	err = cfg.Section("target").MapTo(&share.Config)
    	if err != nil {
    		fmt.Fprintf(share.LogOut, "MapTo映射失败->Err:%s
    ", err)
    		return
    	}
    	fmt.Fprintf(share.LogOut, "配置文件启动->TargetIP:%s TargetPort:%d
    ", share.Config.TargetIP, share.Config.TargetPort)
    	http.HandleFunc("/", share.Config.Forward)                                 // 设置默认路由
    	err = http.ListenAndServe(fmt.Sprintf(":%d", share.Config.LocalPort), nil) 
    	if err != nil {
    		fmt.Printf("http server failed, err:%v
    ", err)
    		return
    	}
    }
    

      

    Songzhibin
  • 相关阅读:
    Jquery的小案例4、实现表单的验证(用户名和邮箱)
    Ubuntu下安装Python
    ListView列宽自适应
    IPtables 版本升级到 v1.4.9
    穿过已知点画平滑曲线(3次贝塞尔曲线)
    贪心算法——NY 14 会场安排问题
    零是奇数还是偶数?
    免费淘宝IP地址库简介及PHP/C#调用实例
    html锚点(mao dian)特殊的超链接
    怎么查看自己电脑的IP地址
  • 原文地址:https://www.cnblogs.com/binHome/p/12965164.html
Copyright © 2020-2023  润新知