proxyman抓包Java中feign请求以及断点请求响应内容修改或流转到本地
- 配置流程
- 第一步: 借助arthas配置请求代理
- 第二步: 借助proxyman配置远程映射
- 第三步: 借助SwitchHosts配置hosts域名
- 最后: 借助ssh的LocalForward功能, 打通网络(这步网络不通才需要)
最近在修bug的过程中, 因为涉及到比较多的微服务, 有一些麻烦的bug, 调试代码需要经过多个或多层feign调用, 不方便针对性的对某个服务进行debug, 基本常规手段, 要么起一个服务, feign调用就只能走服务器, 要么就是多次提交临时代码并构建到开发环境中测试, 要么本地起多个微服务又和开发环境隔离, 要么不隔离共用nacos负载均衡的话, 又会影响测试同学测试功能, 而且在这个过程中也会消耗大量的时间, 也难以进入沉浸状态, 浪费时间和精力.
Proxyman 充当中间人服务器,捕获应用程序和 Web 服务器之间的流量。具有请求断点, 修改请求响应内容的功能.
配置流程
第一步: 借助arthas配置请求代理
这里需要借助arthas工具, 添加需要代理环境变量到需要调试的微服务中

mac电脑点击菜单栏能看到IP和端口, 也可以直接拷贝下来
# 连接arthas
telnet 127.0.0.1 18020# 设置 HTTP/HTTPS 代理
sysprop https.proxyHost 10.0.4.190
sysprop https.proxyPort 9091
sysprop http.proxyHost 10.0.4.190
sysprop http.proxyPort 9091# 验证
sysprop | grep proxy
到这一步就能看到feign请求了

不过现在因为我们feign client配置的是用的服务名, 所以, 我们本地电脑是访问不通的.
第二步: 借助proxyman配置远程映射


按照上图所示, 我们需要将域名(服务名)映射成hosts域名和端口
第三步: 借助SwitchHosts配置hosts域名
SwitchHosts地址

配置完hosts后, 就能够将请求重新走回开发环境了, 如下图所示.

到这基本就完成了相关配置, 但请求进来的时候就可以对请求进行断点并修改请求响应的内容了, 并且也能通过更换或添加远程映射的方式将feign请求到本地来
最后: 借助ssh的LocalForward功能, 打通网络(这步网络不通才需要)
我这边是直接用vscode工具, 习惯用这个
这一步的目的是, 在只能通过ssh访问的服务器中, 将服务端口代理到本地中来

- 也有配置文件的方式
# 添加以下配置
Host aaa.internet.companyHostName 10.0.1.23User root# 通过指定的密钥免密登录IdentityFile ~/.ssh/id_ed25519_xxx# 将本地主机(192.168.2.88)的8000端口映射到远程主机(10.0.1.23)的8000端口, 相当于访问192.168.1.94:8000的流量都转发到10.0.0.23:8000上去# LocalForward <本地IP>:<本地端口> <远程IP>:<远程端口>LocalForward 192.168.2.88:8000 10.0.1.23:8000# 将远程主机(10.0.1.23)的9000端口映射到本地主机(192.168.2.88)的9000端口, 相当于访问10.0.0.23:9000的流量都转发到192.168.1.94:9000上去# RemoteForward <远程IP>:<远程端口> <本地IP>:<本地端口>RemoteForward 10.0.1.23:9000 192.168.2.88:9000
# 通过命令连接即可代理端口, 也非常简单
ssh aaa.internet.company
基本到这就基本讲完的差不多了, 也挺简单的, 个人用起来挺舒服的, 当然也还有些其他更多用途就自己去发掘了, 例如结合ssh的动态代理以及clashx去打通各种各样的复杂网络等各种玩法的结合使用.
