简介
无论是前端还是后端,在开发的过程中,经常会对接其他系统进行一些接口调用的调试,对于简单的单个接口用postman直接输入各个参数值调用就可以了,假如遇到需要多个接口之间依赖参数传递,或者想抓取对比代码中真正发出的请求参数是否是正确的,或者是否有多余跳转时,可以借助一些工具或技巧来完成。下面记录一些实际应用过程中的小技巧案例的思路,以后可以举一反三。
Postman篇
通过参数配置修改不同环境的域名
问题思考1:在调试接口的过程中我们经常需要对比不同环境中的请求报文结果,如果每次重新填写域名是不是比较痛苦?
下面是通过通过参数配置修改不同环境的域名的方法:
- 首先,在postman的请求地址栏中用占位域名,例如:
1 | {{domain}}/cloudDesktop/auth/login |
然后,点击右上角的“眼睛图标”的按钮,定义不同环境的domain值,例如:
localhost环境:
VARIABLE | INITIAL | CURRENT VALUE |
---|---|---|
domain | http://127.0.0.1:8080 | http://127.0.0.1:8080 |
dev环境:
VARIABLE | INITIAL | CURRENT VALUE |
---|---|---|
domain | http://mydev.com | http://mydev.com |
- 最后,通过点击右上角“眼睛图标”左侧紧邻的环境切换选项,即可切换到localhost或者dev环境,相应的参数值会替换掉占位的位置中去。
当然,不仅可以替换域名,替换其他参数也类似,只要明白了替换原理,就可以自定义不同环境的参数值用于替换相应的参数。
通过简单脚本设置请求的token值
问题思考2:上个案例利用定义了不同环境中有不同的参数值来替换参数,但是这有一个缺点,假如我需要替换的参数是个token值,这个值在每次发送登录请求后都是变化的,那么如何动态替换呢?
这就需要结合简单的脚本处理来实现了:
首先,构建一个登录接口的请求,这里不在赘述
然后,在我的登录请求的Tests栏目(该栏目位于Body、Headrs栏目位于同一行)中,输入下面脚本:
1
2
3
4// 把responseBody转为json字符串
var data = JSON.parse(responseBody);
// 设置环境变量token,供后面的接口引用
pm.environment.set("token", data.content.token);接着,先发起登录请求,这时token值就已经赋值给token变量了(如果不放心,可以通过“眼睛图标”去查看token参数对应的CURRENT VALUE值是否被赋予新值)
最后,完成了上面的设置,在剩余其他请求中,只要把需要用到token值的地方,用来占位即可。
当然,上面的脚本要根据自己的登录接口返回报文格式进行修改,请举一反三。
Fiddler篇
抓取https请求的报文
问题思考3:在使用Fiddler进行抓包的过程中,默认是无法抓取到https请求的报文的,那么怎么实现呢?
这时候需要进行如下设置:
- 首先,请在Fiddler Options的HTTPS栏目中按照下图勾选配置:
- 接着,将Postman或者浏览器的代理端口设置为Fiddler的默认监听端口8888
- 最后,在Fiddler的主页面就可以看到抓取的每次请求的HTTP和HTTPS记录了。
抓取JAVA程序中请求的报文
问题思考4:在使用中发现,对于IDEA中的java程序发送的请求比较特殊,按照上述方法还是无法抓取到报文,那么如何实现呢?
需要采用下面的步骤:
- 首先,导出Fiddler的证书(在Fiddler Options的HTTPS栏目中有导出选项),我这里导出到D盘
然后,再命令行中执行如下命令将证书加载到java信任环境中(中间会以交互的形式询问设置证书的密码,例如我这里输入的密码是changeit,记住它,在下面的步骤中会用到这个值)
1
2cd %JAVA_HOME%\jre\lib\security
keytool.exe -import -file D:\FiddlerRoot.cer -keystore D:\FiddlerKeystore -alias Fiddler最后,在程序的java启动里加上如下配置
1
2
3
4
5-DproxySet=true
-DproxyHost=127.0.0.1
-DproxyPort=8888
-Djavax.net.ssl.trustStore=D:\FiddlerKeystore
-Djavax.net.ssl.trustStorePassword=changeit执行完上述步骤后,在JAVA程序中的请求就会被Fiddler抓取到了。
修改请求或者返回报文中的参数
问题思考5:在我们后端人员调试的过程中,有些前端页面发起的请求,这时候后台接口修改了,需要前端页面在功能流程中多传几个参数,如果这时没有前端人员配合,那么我么如何在抓包的过程中拦截请求进行修改呢?
以修改抓取到的请求报文为例,采用如下步骤:
- 首先,选择开启请求拦截规则:Rules–>Automatic Breakpoints–>Before Requests
- 然后,发送请求会被拦截暂停,选择要修改的请求,在请求的Raw选项中可以进行参数的修改
- 最后,点击GO会进行下一步,如果想切换是否开启拦截,可以点击左下角Capturing进行切换控制。
当然,这是比较粗粒度的拦截,更细的拦截规则可以编辑js脚本去完成,更深层的用法,需要自己去拓展了。
总结
个人认为,我这里的技巧都是很浅显的,对于大多数人来说早已使用的滚瓜烂熟。我这里首先是为自己记录思路,另外看看能不能起到抛砖引玉的作用,当然更高级的用法可以使工作效率有显著提升,大家可以在使用过程中进一步搜索高级用法加强自己的调试技巧。
本文链接: https://www.xiajunyi.com/pages/p82.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!