今天朋友发来了一个问题,一个HTTP的请求接口,但是该接口比较特殊,在请求的过程中会进行重定向处理,现在需要获到重定向这个接口中的一个参数值(click_id)作为其它接口传参使用,由于解决这个问题的曲折过程(思维没有打开,走了很多弯路),所以有必要记录一下解决过程
先来看看这个接口的请求过程
1、接口请求时,首先进行了重定向,如下图所示(HTTP请求-0)

2、根据重定向的结果,获得了一个HTML的响应结果,现在就需要获取这个响应结果中的click_id的值,如下图所示

3、重定向完成后,需要步骤2中响应结果(click_id)作为请求参数传参,进行HTTP请求-1,如下所示

初看这个问题,我觉得很简单,不就一个正则表达式就可以解决的问题么(正则用来匹配响应结果参数),结果呢,并不是想象中的那么简单,一个主请求,两个子请求,怎么用正则呀(反正我没想出来怎么解决,如果有看到这里的大神想到了解决办法,欢迎在评论区留言)
思路换一换,可以不让这个接口进行重定向么?答案是肯定的,jmeter很简单的一个设置就搞定了,在接口请求设置中,取消"自动重定向"和"跟随重定向",如下所示

再来跑这个接口,果然没有进行重定向,且接口响应结果中也有我想要的"click_id"这个参数,如下所示

出现了上面这个响应结果,是不是正是类似我们熟悉的、想要的结果呢,但是和之前的接口响应有一点点区别,以前大多数接口的响应参数都是json格式的,但是这个我们仔细一看,是一个超链接,HTML格式的,类似方法处理,正则来获取响应结果
前面已经提到了,我只需要获取的是click_id这个字段,正则如下

但是运行结果一看,获取到的click_id值这么长,并不是我想要的

有没有大神知道这个地方的正则怎么写,能够通过一个正则就获取到click_id的值,欢迎留言
正则写不出来,但是能够获取到href的值,问题已经解决80%了,突然想到了另一个思路,我在另一个接口传参的时候,通过截取想要的字符串不就可以了么,况且jmeter本身就自带有一个字符串截取的函数__substring,思路有了,问题就迎刃而解了
另一个接口中,传参过程中,直接截取想要的字符串,问题搞定

其实这个案例应该有很多解决办法,比如正则匹配的时候,我想是可以直接通过表达式就获取到click_id的(但是由于水平原因,没搞出来,哈哈),今天记录这个案例的原因,主要是想提醒一下自己,不要太局限于固定的思维,解决问题,最重要的是思路,有了思路,问题将不再是问题
网友评论