go proxy转发工作中碰到的问题
A-B
需求是一个中转
A-Proxy-B
读取来源请求A,在proxy读取body作些处理,再转给B,再把返回内容转给A
问题出在proxy这里
如果先把请求给B,再读body
res, err := transport.RoundTrip(req)
bodyBytes, _ := ioutil.ReadAll(req.Body)
则报错 http: invalid Read on closed Body
如果先
bodyBytes, _ := ioutil.ReadAll(req.Body)
res, err := transport.RoundTrip(req)
则无响应
通用B的后端来看,请求的body为空,没了
req.Body只能一次读取,取完之后就关闭
req.body),只能读一次,代理读了,转发给B就空了;转发给B了,就读不到了。
网上找到解决办法答案
https://medium.com/@xoen/golang-read-from-an-io-readwriter-without-loosing-its-content-2c6911805361
代理先读一次
读出后再写入req
再转发
多了写入req的步骤
代码如下
// 先读
var bodyBytes []byte
if c.Request.Body != nil {
bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
}
// 写回去
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
// 转发
res,err:=transport.RoundTrip(req)
// 这里就可以随意处理了
bodyString := string(bodyBytes)
go proxy转发工作中碰到的问题的更多相关文章
- 工作中碰到的js问题(disabled表单元素不能提交到服务器)
今天碰到一个奇葩的问题,asp页面表单提交后,有一个文本框<input type="text" name="phone" id="phone&q ...
- 工作中碰到的一个问题(cookie相关)
今天上线了一个API,6台机器做的集群.API的第一步是读取cookie,判断用户是否登录. 例如,线上服务器分别是 10.255.242.1 10.255.242.2 10.255.242.3 10 ...
- 工作中碰到的css问题解决方法
好久都没来这写东西了,都长草了.刚解决的两个小问题,先记下来 textarea横向没有滚动条加上 wrap="off"这个属性 英文单词不断行加上这个 word-break:bre ...
- 总结工作中常见的linux命令
本文是总结下自己在工作中遇到的常见linux 命令,会持续更新! 1.文件路径切换 进入 cd 返回上一级 cd .. 2.复制 cp 源文件名 目标文件夹 cp log.log test5 3.编 ...
- 测试工作中经常用到的几个Linux命令(第一弹)
自己平时测试工作中经常要在Linux下搭建测试环境,有涉及到启动/终止服务器,修改tomcat配置文件,偶尔碰到端口被占用... 这时就不得不需要一些基本的Linux命令来处理遇到的这些问题(顺便迈向 ...
- 测试工作中经常用到的一丢Linux命令
自己平时测试工作中经常要在Linux下搭建测试环境,有涉及到启动/终止服务器,修改tomcat配置文件,偶尔碰到端口被占用... 这时就不得不需要一些基本的Linux命令来处理遇到的这些问题 1.cd ...
- ES6在工作中会用到的核心知识点讲解
一.var, let, const 谈到ES6,估计大家首先肯定会想到var,let,const 咱就先谈谈这三者的区别 var a = 3; { var a = 4; } console.log(a ...
- 随机记录工作中常见的sql用法错误(一)
没事开始写博客,留下以前工作中常用的笔记,内容不全或者需要补充的可以留言,我只写我常用的. 网上很多类似动软生成器的小工具,这类工具虽然在表关系复杂的时候没什么软用,但是在一些简单的表结构关系还是很方 ...
- 工作中常用的js、jquery自定义扩展函数代码片段
仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...
随机推荐
- 前端 Docker 镜像体积优化
如果 2019 年技术圈有十大流行词,容器化肯定占有一席之地,随着 Docker 的风靡,前端领域应用到 Docker 的场景也越来越多,本文主要来讲述下开源的分布式图数据库 Nebula Graph ...
- 直击JDD | 徐雷:智能化零售,以技术为驱动力的突破路径
"京东零售已经成为一家典型的以技术驱动为主的零售公司".在11月19日召开的 2019京东全球科技探索者大会上,京东零售集团CEO徐雷首次阐释了京东零售的智能化零售路径. 徐雷指出 ...
- 用tkinter写一个记事本程序(未完成)
之前在看tkinter与python编程 ,后面学opengl就把那本书搁置了.几天没用tkinter,怕是基本的创建组件那些都忘记了,所以想着用tkinter试着写一下记事本程序.一开始的时候以为很 ...
- Java--类初始化
package httpclient.demo; public class StaticTest { public static void main(String[] args) { staticFu ...
- 【WPF学习】第三十七章 触发器
WPF中有个主题,就是以声明方式扩展代码的功能.当使用样式.资源或数据绑定时,将发现即使不使用代码,也能完成不少工作. 触发器是另一个实现这种功能的例子.使用触发器,可自动完成简单的样式改变,而这通常 ...
- java.sql.BatchUpdateException: ORA-01691: Lob 段 CSASSSMBI.SYS_LOB0000076987C00003$$ 无法通过 128 (在表空间 HRDL_CSASS 中) 扩展
问题: 在tomcat日志信息中出现:java.sql.BatchUpdateException: ORA-01691: Lob 段 CSASSSMBI.SYS_LOB0000076987C00003 ...
- Exit of “> ” mode in Unix shell
https://unix.stackexchange.com/questions/118209/exit-of-mode-in-unix-shell ^D will only work if a pr ...
- SSM到Spring Boot-校园商铺平台
第04章 店铺注册功能模块 4-3 Thumbnailator图片处理和封装Util[通过java代码实现给图片打上水印] 4-3 Thumbnailator图片处理和封装Util[通过java代码实 ...
- python深度学习6.2
Deep Learning with Python>第六章 6.2 理解循环神经网络(RNN) 神机喵算 2018.09.01 20:40 字数 2879 阅读 104评论 0喜欢 1 沉下心来 ...
- \_\_slots\_\_
__slots__ 一.什么是__slots__ __slots__是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 使用点来访问属性本质就是 ...