首页 > 其他分享 >1.go做反向代理

1.go做反向代理

时间:2022-11-22 11:06:55浏览次数:47  
标签:Body http log 代理 Write 反向 func go os

后端服务器代码

package main
import (
"log"
"net/http"
"os"
"os/signal"
)
type webHandler struct {

}
func (webHandler) ServeHTTP (w http.ResponseWriter, request *http.Request ){
w.Write([]byte("this is web1"))
}
func main(){
c:=make(chan os.Signal)//信号
go func() {
http.ListenAndServe(":9091",webHandler{})
}()
signal.Notify(c,os.Interrupt)
s:=<-c
log.Println(s)
}

前端代码

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" {
newreq,_:=http.NewRequest(r.Method,"http://localhost:9091",r.Body)
req,_:=http.DefaultClient.Do(newreq)
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{})
}

 

标签:Body,http,log,代理,Write,反向,func,go,os
From: https://blog.51cto.com/u_11635800/5877044

相关文章

  • Golang学习日志 ━━ 理解依赖包的管理(mod/非mod)和加载方式(项目路径、相对路径、绝对
    go有很多种方法调用依赖包,mod又加入了对包的版本管理。方式太多不免有令人迷惑和混乱的地方,希望本文能帮助大家了解目前使用规则一、mod/非mod管理方式go提供了两种项目......
  • go安装redis扩展
    1.在github.com网站找到对应的扩展【goget下载】【https://github.com/gomodule/redigo】 2.在本地环境安装go的环境变量下安装使用命令【确认git已经安装成功】   3.......
  • go 实现爬虫
    一:使用go获取远程图片存储在本地案例1>生成随机数len:=32bytes:=make([]byte,len)r:=rand.New(rand.NewSource(time.Now().Unix()))fori:=0;i<len;i++{......
  • CentOS6.4安装Golang环境
    什么是Go?  Go是一门并发支持、垃圾回收的编译型的系统编程语言,目的是为了创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。......
  • Nginx 代理 jira 和 confluence
    jira和confluence想部署到同一台机器上。都使用80端口访问。使用nginx代理吧。直接使用proxy_passhttp://127.0.0.1:8080jira的首页小插件不太好使。发现使用tr......
  • 从 docker 容器反向生成 docker-compose yml 文件
    问题场景docker-compose.yml被不小心删除了,但是容器还在没有使用docker-compose管理的容器现在想迁移到docker-compose上反向生成docker-compose.yml文件使用......
  • Pytorch在训练时冻结某些层使其不参与反向传播
    笔记摘抄:https://blog.csdn.net/qq_36429555/article/details/118547133定义网络#定义一个简单的网络classnet(nn.Module):def__init__(self,num_class=10):......
  • 三种获取Go项目根目录的方式,让你做架构,选哪种?
    大家好,这里是每周都陪你进步的网管~在搭建项目中一般都会有确定项目根目录的绝对路径的需求,一旦有了根目录的绝对路径,就能以这个根目录为基准,设置静态文件、配置文件所在的......
  • Spring Data (数据)MongoDB(二)
    10.6.查询文档您可以使用theandclasses来表达您的查询。它们具有反映本机MongoDB运算符名称的方法名称,例如,,,等。Theandclasses遵循流畅的API样式,因此您可以将多个方......
  • Spring Data (数据)MongoDB(三)
    10.21.更改流从MongoDB3.6开始,ChangeStreams允许应用程序获得有关更改的通知,而无需跟踪oplog。更改流支持仅适用于副本集或分片集群。更改流可以与命令式和反应式MongoDB......