首页 > 其他分享 >golang http proxy反向代理

golang http proxy反向代理

时间:2022-11-18 14:35:52浏览次数:47  
标签:http func Request golang proxy io main ResponseWriter

第一种方法

后端代码:

package main

import (
    "io"
    "net/http"
)

func web1Func( w http.ResponseWriter, r* http.Request){
    io.WriteString(w,"<h1>this is test info web1</h1>")
}

func web2Func(w http.ResponseWriter, r*http.Request){
    io.WriteString(w,"<h1>this is test info web2</h1>")
}

func main(){
    http.HandleFunc("/web1",web1Func)
    http.HandleFunc("/web2",web2Func)
    http.ListenAndServe(":9001",nil)
}

前端代码:

package main

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

}
func (MyMux) ServeHTTP(w http.ResponseWriter,r *http.Request){
    if r.URL.Path == "/web1" {
        newRequest,_:= http.NewRequest(r.Method,"http://localhost:9001/web1",r.Body)
        req,err:=http.DefaultClient.Do(newRequest)
        if err != nil {
            log.Println("is error")
            return
        }
        data,_:= ioutil.ReadAll(req.Body)
        w.Write(data)
        return
    }
    if r.URL.Path == "/web2" {
        newRequest,_:= http.NewRequest(r.Method,"http://localhost:9001/web2",r.Body)
        req,err:=http.DefaultClient.Do(newRequest)
        if err != nil {
            log.Println("is error")
            return
        }
        data,_:= ioutil.ReadAll(req.Body)
        w.Write(data)
        return
    }


}

func main(){
    http.Handle("/",MyMux{})
    http.ListenAndServe(":7001",nil)
}

思考:第一种方法虽然可行,但是header头里面的信息传递不到后面去,如果需要传递的话,还必须加工http的header头

第二种方法

 后端代码:

package main

import (
    "io"
    "net/http"
)

func web1Func( w http.ResponseWriter, r* http.Request){
    io.WriteString(w,"<h1>this is test info web1</h1>")
}

func web2Func(w http.ResponseWriter, r*http.Request){
    io.WriteString(w,"<h1>this is test info web2</h1>")
}

func web3Func(w http.ResponseWriter, r*http.Request){
    io.WriteString(w,"<h1>this is test info web3</h1>")
}
func main(){
    http.HandleFunc("/web1",web1Func)
    http.HandleFunc("/web2",web2Func)
    http.HandleFunc("/web3",web3Func)
    http.ListenAndServe(":9001",nil)
}

 前端代码

package main

import (
    "net/http"
    "net/http/httputil"
    "net/url"
)
type MyMux struct {

}
//简单反向代理代码最少,heaer也传递过去了
func (MyMux) ServeHTTP(w http.ResponseWriter,r *http.Request){
    sendurl:="http://localhost:9001"
    target,_:=url.Parse(sendurl)
    proxy:=httputil.NewSingleHostReverseProxy(target)
    proxy.ServeHTTP(w,r)
}

func main(){
    http.Handle("/",MyMux{})
    http.ListenAndServe(":7001",nil)
}

 

标签:http,func,Request,golang,proxy,io,main,ResponseWriter
From: https://www.cnblogs.com/zh718594493/p/16903116.html

相关文章

  • 用网页 实现断点续传 (HTTP)
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好......
  • 为什么vue3要选用proxy,好处是什么?
    提问Object.defineProperty()和proxy的区别?为什么vue3要选用proxy,好处是什么?proxyProxy对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋......
  • 用SpringBoot 实现断点续传 (HTTP)
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好......
  • 驼峰转下划线 golang
    packagemainimport(  "fmt"  "regexp"  "strings")varmatchNonAlphaNumeric=regexp.MustCompile(`[^a-zA-Z0-9]+`)varmatchFirstCap=regexp......
  • 用SpringMVC 实现断点续传 (HTTP)
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用......
  • bat curl 发送http请求 监控网站
    定时发送http请求监控网站,还有日志输出记录@echooffcolor1ftitlebig-keyboardsetINTERVAL=60:lookHttpecho%date%%time%curl-shttps://www.cnblogs.com......
  • C# Http请求 POST 和 GET 和 DELETE 方式
    客户端的HTTP的请求方式一般分为四种:GET、POST、PUT、DELETE,这四种请求方式有什么不同呢。简单的说,GET就是获取资源,POST就是创建资源,PUT就是更新资源,DELETE就是删除资源......
  • 浅浅理解一定要看哦-HTTPS - 揭秘 TLS 1.2 协议完整握手过程,一定要结合wirshark工具看
    winshark筛选条件为:tlsandip.src==xxx  本文通过对一次TLS握手过程的数据抓包分析做为切入点,希望能进一步的帮助大家理解HTTPS原理。HTTPS是建立在SSL/TLS......
  • 配置 haproxy 负载均衡群集
    配置haproxy负载均衡群集......
  • HTTPS的优点和缺点解析
    https改造有什么好处?对于这个问题,站长首先想到应该是网站安全问题,可以说网站安全问题其实是个大问题,主要表现在以下方面:1、首页会被篡改,非法跳转;2、网站被灌入广告,但收入......