相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑。 业务场景 我这里以JMeter来举例,我们可以通过在JMeter上开启代理,手机上设置代理来录制微信端的请求,以下为在微信端的业务对应生成的脚本: 录制完成后,我们进行回放,你会发现在查看结果树 这里补充几个录制的小技巧 1、每个组放入一个新的控制器:在手机端上做的一次操作所产生的请求会被放在一个控制器中,非常方便; 2、选中记录HTTP信息头、添加断言、Regex matching :自动添加信息头和断言; 问题分析 这里我们看一下请在微信客户端打开链接页面对应的代码: < type="text/java"> var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; var isAndroid = ua.indexOf('android') != -1; var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1); if (!isWeixin) { document.head.innerHTML = '

抱歉,出错了

'; document.body.innerHTML = '

请在微信客户端打开链接

'; } 重点看: var ua = navigator.userAgent.toLowerCase();var isWeixin = ua.indexOf('micromessenger') != -1; 说明微信的这个提示是通过判断userAgent中是否包含micromessenger确认是否从微信中打开。 好了,我们查看以下HTTP头中的userAgent: 录制的时候自动添加了录制HTTP请求头的,那么为什么在JMeter打开会仍然会提示呢?这里怀疑是微信故意留的坑或者是微信开发这个页面的人英语四级没过。 解决方案 经过和我们程序猿哥哥陈丹明和陈建清一番讨论,一开始没有解决方案;此时丹明怀疑MicroMessenger这个单词写错了,应该是:micromessage!一试,果然! 好吧,程序猿你赢了,看来懂英语是多么的重要。 最终解决 在HTTP请求头里面将MicroMessenger修改成 micromessage。 小结 1、请在微信客户端打开链接 这个问题困扰了我们很久,今天总算解决,完美解决; 2、感谢程序猿的大胆怀疑,给他们点赞; 3、自动化测试过程中如果碰见了技术瓶颈,不妨多和研发沟通,他们总能给你一些指导。 再分享一文: 使用Fiddler抓包解决“请在微信客户端打开链接”的问题 如何看一个微信小项目的H5源代码,我想大家通用的方式就是在微信里面打开H5,然后点击右上角的复制链接,然后把链接放到PC端浏览器里面查看源代码,但是有很多做了微信授权的H5会提示,如下图 做过微信授权开发的朋友都知道,遇到这个页面就算再怎么复制链接都不行了,以前还能在PC端的微信里面直接点链接可以查看代码,貌似现在也被微信封了,但是别人好的代码我们是需要学习交流的,怎么办呢?在网上查了一些资料,发现可以用Fiddler手机抓包来解决,用软件抓包源于做一个.NET开发的GPS数据收集信息并分析的项目,掐指一算整整8年过去了,基本上都不知道怎么用了,甚至都不记得当时是不是用Fiddler软件,最近用Fiddler是在本地替换服务器的JS文件的功能上,这个用法貌似也是很不错的,有机会另开一篇,话归正题,我们还是来看看怎么用Fiddler来对手机(本文是通过iphone,android的还没试过,估计大同小异)进行抓包。 1、下载Fiddler链接:http://rj.baidu.com/soft/detail/10963.html?ald 2、安装Fiddler,这个反正就下一步到底。 3、设置一,Tools->Fiddler Options->HTTPS选项卡里面,把Capture HTTPS CONNECTs和下面的都勾上吧,Fiddler就可以截获HTTPS请求,如下图 4、设置二,就上面图中的Connections选项卡,选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来,端口号默认8888,如下图 Fiddler的准备工作就差不多结束了,现在我们需要来做手机端的设置。 5、手机和PC网络互通,就是手机和PC必须连的是一个路由器,这个时候我们找到PC端的IP,本机是192.168.1.20,那么我们就在手机端复制地址http://192.168.1.20:8888。 6、安装证书,别被这个标题吓到了,其实很简单,就是一个通行证的原理,打开手机浏览器(千万别在微信里面点击,我之前就是在微信里面直接点,装了半天没装上,差点就放弃了),把上面手机复制的地址http://192.168.1.20:8888粘贴到地址栏中,点击转到,就会出来如下画面 点击红框里面的FiddlerRoot certificate,然后点击右上角的安装,最后右上角会提示完成,都是很简单的操作就不贴图了,此时证书就算是安装完成。 7、修建一座桥的两边桥墩算是建好了,这个时候我们就需要做连通了,怎么样才能把手机和PC端的Fiddler连接起来呢?证书通行证我们拿到了,但是还需要一个暗号,这个时候我们就打开手机的设置,把第1步得到的IP按照下图红框所示填好就行,对应8888端口也填上。 8、检查,点击上图的左上角的返回箭头,回到无线设置页面,这个时候无线会自动再连接一次,连接完之后测试一下上网功能正常不,如果正常的话我们99%的工作就完成了,最后的1%就是收获了。 9、测试链接:http://lcs.cytslinkage.com/h5/bq/,这个链接直接在PC浏览器里面打开是会提示的,既然我们是通过fiddler去拦截手机请求包,那么显然应该是从手机端打开链接了,打开微信,点击链接(点击之前确保Fiddler是开启状态),等待H5项目加载完毕,这时候Fiddler的界面就如下图,我们仔细看下,就会发现HTML、js和css文件都有,貌似就找到了我们需要的东西了,最后再贴一个图 10、小结:虽然工作十年了,但还是第一次写博客,也算是自己人生路上的另一个挑战,至于好不好,能不能得到认可,反正先干了再说,虽然这个算是一个比较糟糕的鸡蛋,但是我相信总有一天鸡蛋会画好的。 上文来自:秦渝淋 博客