API-登录接口无法访问成功的解决方案

近期有朋友问一个关于登录接口的问题,场景如下:

有个项目必须使用VPN才能访问,需要做API接口方面测试,需要使用JMeter或Postman类的HTTP请求工具来实现端口的访问,实际操作中发现:登录接口是Form表单形式,需要传递用户名、密码、验证码、ID,共4项参数,理论上发送接口请求后应该返回登录成功后自动跳转的页面,但实际返回的是登录页,并没有完成跳转,但status code(响应状态码)却返回的是200,说明请求通了,尝试了N种做法仍然无法解决问题。接下来我分享一下我排查这个问题的主要思路。

**********排查过程**********

1、因为是通过VPN访问的项目,所以开始怀疑是VPN的问题导致的,故而开始查找VPN限制的是什么端口,怕是postman类的工具用的主要端口被VPN屏蔽,查了一大圈后发现不是VPN的问题,且这个事和VPN没有任何关系。

2、使用Fiddler抓包工具进行抓取(因为没有API文档只能自己抓),发现前台的数据包基本都可以抓到,于是抓了一个项目中的其它接口尝试用postman去请求,结果很惊人:另一个接口,成功的返回了应该返回的数据,这更进一步证实了postman是可以正常对接口进行请求的,并非VPN做了限制。

3、使用fiddler抓取登录接口,发现点完登录按钮之后出现了两次重定向(304)于是怀疑是不是在重定向过程中发生了什么问题而导致无法跳转到新的页面,于是我查看了浏览器的代理设置,甚至通过查询BD去修改了postman本身关于代理方面的设置,结果还是一样,未解决问题

4、怀疑是否是有必填参数没填导致(以以往的工作经验来讲,登录请求一般都会携带一个token来验证身份等信息)但抓包时并未发现有token信息,只发现了cookie,于是我手动把cookie放在了请求头中去请求,结果还是未解决问题,并且还发现cookie其实已经自动被postman补上了,程序用的是session

5、怀疑是请求类型传错了,所以又反复抓包确认了确实是form表单类型,但我依然尝试了把参数写在json里以请求体的形式传递了出去,结果还是没解决问题

6、怀疑是content-type的值传错了,经过反复核对,application的value是没有问题的,网上说的很多解决方案并不适用于我目前的情况

7、怀疑是登录接口和其它接口有后端代码的逻辑关联,于是我又重新对登录接口抓包,发现在登录时还有另一个接口也发送了请求,是verify接口(验证码)接口,我迫不及待的去postman中对verify接口发送请求,请求成功后发现只返回了一张Image图片,其它的信息并没有看到,但总感觉两个接口之间有关联,于是又无意识的点了一下登录接口,神奇的事情发生了!登录接口成功访问到了登陆之后的页面,重定向的页面也自动执行了,至此,豁然开朗,问题解决!


*********现象分析*********

原因:经过排查发现返回登录页并不是因为参数传递错误,反而是页面访问成功后才会展示那个页面[status code : 200](至于返回的页面里没有展示密码和验证码是UI渲染的问题与接口无关)根本原因是在于后台的登陆逻辑,虽然验证码在项目中暂时被写死,但仍需先获取验证码再提交登录的form表单 


 *********解决方案*********

第一步:访问验证码接口

第二步:在验证码没过期之前,访问登录接口(前提是参数都传对了)

配图(图中接口信息涉密,故打了马赛克):

5415b91234ba41aaaed01ac901511497.png

7e679e7d726146a790d59fac9a243485.png

至此,问题解决,既是对自己的一次复盘,也同样借此机会分享给遇到同样问题的朋友们,希望可以让遇到同样问题的朋友少走弯路。


❤关注我,不迷路❤

******我的本文相关专栏******

软件测试 & 开发(单击此处进入)


 ******我的其它作品专栏******

PC常见故障汇总专栏(点击进入)

EXCEL综合场景应用详解(点击此处进入)

全国计算机等级考试-二级python基础(点击此处进入)

猜你喜欢

转载自blog.csdn.net/Liu_GuoXing/article/details/129885460