当前位置: 首页 > news >正文

Go语言实现HTTP正向代理

文章目录

  • 前言
  • 实现思路
  • 代码实现

前言

正向代理(Forward Proxy)是一种代理服务器的部署方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理可以用来隐藏客户端的真实身份,以及在不同网络环境下实现访问控制、负载均衡、缓存、访问优化等功能

实现思路

使用Go启动一个HTTP服务器,接收到客户端的请求后,使用服务器发送客户端的请求,然后将响应结果返回给客户端

代码实现

package mainimport ("context""io""log""net""net/http""strings"
)type ForwardProxy struct {}func (p *ForwardProxy)ServeHTTP(w http.ResponseWriter, r *http.Request){transport := http.DefaultTransport// 拷贝一个request 对象,避免后续修影响了源对象req := r.Clone(context.Background())// 设置X-Forward-For 头部// X-Forward-For 字段的值是一个逗号分隔的 IP 地址列表// 列表中的第一个 IP 地址通常是客户端的真实 IP 地址,后续的 IP 地址则是代理服务器或负载均衡器的地址if clientIp , _ , err := net.SplitHostPort(r.RemoteAddr); err == nil{if prior, ok := req.Header["X-Forward-For"]; ok {clientIp = strings.Join(prior, ", ") + ", " + clientIp}req.Header.Set("X-Forward-For", clientIp)}// 构造新请求response,err:=transport.RoundTrip(req)if err != nil {w.WriteHeader(http.StatusInternalServerError)return}// 获取响应数据并返回for k,v := range response.Header{for _,v1 := range v{w.Header().Add(k,v1)}}w.WriteHeader(response.StatusCode)io.Copy(w,response.Body)response.Body.Close()
}var serverAddr = ":8888"func main() {server := &http.Server{Addr: serverAddr,Handler: &ForwardProxy{},}if err := server.ListenAndServe(); err != nil{log.Fatal("HTTP forward proxy failed to start.")}
}
http://www.lryc.cn/news/221098.html

相关文章:

  • 第11章_数据处理之增删改
  • 数据时代的新引擎:数据治理与开发,揭秘数据领域的黄金机遇!
  • 使用 Golang 实现基于时间的一次性密码 TOTP
  • 微服务之Nacos配置管理
  • PySpark 优雅的解决依赖包管理
  • UNI-APP_获取手机品牌
  • 新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统
  • 「掌握创意,释放想象」——Photoshop 2023,你的无限可能!
  • SQLSugar查询返回DataTable
  • 企业微信开启接收消息+验证URL有效性
  • 电脑访问不到在同网络的手机设备
  • 国内MES系统应用研究报告:“企业MES应用现状”| 百世慧®
  • C++模板元模板实战书籍讲解第一章题目讲解
  • Java在互联网网络安全中的应用(三)
  • VMLogin如何解决跨境电商多账号管理难题?
  • STM32创建工程步骤
  • 软考 系统架构设计师系列知识点之边缘计算(1)
  • vue:写一个数组box和list数组,在保留box数组中原有对象的同时,将list数组中每一个对象插入到box数组后面
  • Python教程:随机函数,开始猜英文单词的游戏
  • Unit2_1:动态规划DP
  • k8s提交spark应用消费kafka数据写入elasticsearch7
  • linux傻瓜式安装Java环境及中间件
  • javascript中的new原理及实现
  • R语言 PPT 预习+复习
  • 轻松实现固定资产智能管理的工具来了
  • 软考高级系统架构设计师系列之:微服务
  • vue + axios + mock
  • Mongoose 开源库--json 使用笔记
  • linux中复制文件如何排除一个目录
  • 时空智友企业信息管理系统任意文件读取漏洞复现