首页 > 其他分享 >3.go代理basic

3.go代理basic

时间:2022-11-16 17:22:14浏览次数:43  
标签:http log err req 代理 Header func basic go

1.通过代理转换

后端服务

package main
import (
    "encoding/base64"
    "log"
    "net/http"
    "os"
    "os/signal"
    "strings"
)
type webHandler struct {
}
func (webHandler) ServeHTTP (w http.ResponseWriter, r *http.Request ){
    auth:= r.Header.Get("Authorization")

    log.Println(r.Header.Get("names"))

    if auth == "" {
        w.Header().Set("WWW-Authenticate",`Basic realm=11111"`)
        w.WriteHeader(http.StatusUnauthorized)
        return
    }
    log.Println(auth)
    authList := strings.Split(auth," ")
    log.Println(authList)
    if len(authList) ==2 && authList[0] =="Basic" {
        res,err:= base64.StdEncoding.DecodeString(authList[1])
        if err != nil {
            log.Println("is errors")
        }
        if( (err ==nil)  && (string(res) == "zhangsan:111111")){
            w.Write([]byte("come in"))
            return
        }
    }
    w.Write([]byte("用户名密码错误"))
}
func main(){
    c:=make(chan os.Signal)//信号
    go func() {
        http.ListenAndServe(":9091",webHandler{})
    }()
    signal.Notify(c,os.Interrupt)
    s:=<-c
    log.Println(s)
}

2.前端

package main

import (
    "io/ioutil"
    "log"
    "net/http"
)
type ProxyHandle struct {

}
func (p ProxyHandle) ServeHTTP(w http.ResponseWriter,r *http.Request){
    defer func(){
        if err:= recover();err != nil {
            w.WriteHeader(500)
            log.Println(err)
        }
    }()
    if r.URL.Path == "/a" {
        newrequest,_:=http.NewRequest(r.Method,"http://localhost:9091",r.Body)//生成一个新的请求
        for k1,v1:=range r.Header {
            newrequest.Header.Add(k1,v1[0])
        }

        req,_:=http.DefaultClient.Do(newrequest)
        for k,v:=range req.Header {
            w.Header().Set(k,v[0])
        }
        w.WriteHeader(req.StatusCode)
        defer req.Body.Close()
        ss,_:=ioutil.ReadAll(req.Body)
        w.Write(ss)
        return
    }

    w.Write([]byte("<h1>defualt index</h1>"))
}
func main(){
    http.ListenAndServe(":8080",&ProxyHandle{})
}

 

标签:http,log,err,req,代理,Header,func,basic,go
From: https://www.cnblogs.com/zh718594493/p/16896611.html

相关文章

  • ASEMI代理力特二极管LSIC2SD120A05,肖特基LSIC2SD120A05
    编辑-Z力特碳化硅肖特基二极管LSIC2SD120A05参数:型号:LSIC2SD120A05重复峰值反向电压(VRRM):1200V连续正向电流(IF):5A非重复正向浪涌电流(IFSM):40A功耗(PTot):100W工作结温度(TJ......
  • Good Blogs
    https://www.luogu.com.cn/blog/virus2017/shuweidp数位DPhttps://www.cnblogs.com/Phoenix41/p/12537234.html组合数学选讲......
  • 4.django-模板
    在django中,模板引擎(DTL)是一种可以让开发者将服务端数据填充到html页面中的完成渲染的技术模板引擎的原理分为以下三步:在项目配置文件中指定保存模板文件的的模板目录,一......
  • docker报错Got permission denied while trying to connect to the Docker daemon soc
    报错内容GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Get"http://%2Fvar%2Frun%2Fdocker.sock/v1.......
  • HTTP代理是什么意思
    HTTP代理指的是使用代理服务器使网络用户访问外部网站。代理服务器是介于浏览器和Web服务器之间的一台服务器,是建立在超文本传输协议上的网络浏览方式,作用是可以防伪部......
  • 使用高匿名HTTP代理有什么优点
    不少人在选择代理套餐的时候,追求低成本,选择的HTTP代理套餐也是五花八门,但唯一的要求就是要便宜,能有多便宜就要有多便宜,以致于直接选择一般的透明代理也在所不惜。透明......
  • 记一次postman没问题vue配置代理接口404问题
    注意是否配置了多个代理,接口路径是否和代理有重复名称!!!下图就会导致404原因解析:axios的请求url,不能包含有其他代理的名字......
  • Nginx 作 WebService 反向代理
    Nginx的 server 配置 ksb.conf:upstreamrouter{server10.88.115.114:5555weight=2;server10.88.115.137:80weight=1;}server{listen......
  • 3.django-视图
    django的视图主要有两种,分别是函数视图和类视图,也就是FBV和CBV,先学习FBV1.请求方式常见的请求方式如下GET:获取数据POST:添加数据DELETE:删除数据PUT:更新数据PATCH局......
  • go语言实现第一个程序-hello,world!
    0.前言工作中一直使用c++编写高并发服务器程序,但c++编写高并非服务器程序时多线程逻辑,锁机制导致的死锁,内存泄漏,崩溃等问题会耗费大量时间和精力。听同事说go语言是专门做......