zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    P1093 奖学金
    『模板』快速排序
    [模板]选择排序&&冒泡排序&&插入排序
    CF898A Rounding
    计算细胞数【BFS】
    字符串匹配问题(lfyzoj)
    [HDU]4694 Important Sisters(支配树)
    [BZOJ]4650: [Noi2016]优秀的拆分
    [BZOJ]4908: [BeiJing2017]开车
    [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
  • 原文地址:https://www.cnblogs.com/binHome/p/12965164.html
Copyright © 2011-2022 走看看