利用fiddler和mock调试本地微信网页
利用fiddler和mock调试本地微信网页
微信公众号网页是比较特殊的页面,普通页面直接打开即可访问,但对于需要请求微信相关接口的部分需要安全域名认证。这导致了使用mock数据进行开发的页面没办法走完整个流程,还是需要把代码发布到服务器上才可以测试。而发布服务器的速度总是要时间的,每次修改都发布服务器耗时较长,大大延长了开发时间。使用一种本地开发的技术就比较重要了。
https是一种安全的认证,我们要进行伪造数据进行劫持的话就必需自签证书,通过系统信任就可以将https的数据指向任何我们想要的服务上。利用这个特性,调试微信网页就极为简单了。本文针对的是传统的静态网页,针对的是增量开发时的调试,全新的业务不适用于此方案,SPA网页可能需要其他工具,但原理是相同的。
1. 开启域名劫持
fiddler是一款极为强大的软件,可对数据进行抓取和代理。要实现域名劫持,就要利用工具进行配置。
- fiddler基础配置。网上教程有很多,具体配置就不讲了。关键点在于配置好https劫持,并在调试的手机上下载fiddler的证书进行安装。这一部分都是通用的,很容易做到。在配置完成可以对微信网页进行抓包后,查看是否所有的网页请求已经在fiddler中出现了。
 - 配置域名代理。在fiddler右侧的tab页中选择autoResponder标签页,打开enable rules选项和unmatched requests passthrough。点击add rules。在下方的rule Editor分别输入:
 
上方:
REGEX:^https://server\.example\.com/(.*)
下方:
http://192.168.20.61:3838/$1
其中 server\.example指的是需要劫持的域名, 192.*是你开启mock服务的机器地址和端口。此时再访问劫持的域名,会发现请求是发往本机的。原理是利用fiddler的正则功能,将目标域名路径后面的内容全部捕获,转发到我们局域网主机的端口上。只要在端口上实现相应的转发功能,就可以进行劫持了。
2. 开启mock服务
mock服务指的是本机服务。由于页面需要请求本机内容,接口中一部分需要请求真正的服务端,便于身份认证和获取微信认证相关内容,另一部分内容则需要进行API提供,在增量式开发时对服务端尚未完成或者使用测试账号数据量过少的接口进行mock。因此mock服务要满足以下几个条件:
- 能够对开发过程中网页进行增量构建。这个过程比较重要,全量构建导致构建速度过慢,不利于开发过程中快速调试。
 - 能够对构建生成的文件提供静态资源服务。
 - 能够提供404请求代理至服务器。
 - 指定的API代理至指定的服务器。
 - 能够提供便于编辑的API。
 
这些功能利用Nodejs其实都很容易做到。条件1中是根据开发过程决定的。我们公司使用的是gulp构建,利用browserify对require进行处理,同时添加autoprefixer进行css前缀的添加,rev模块对js和css进行hash值的计算并添加后缀。全量构建时会耗时较长,因为开发了一个增量式构建。其他的条件都是mock服务提供的。我之前开发的一套用于开发的mock服务xmocker可以实现这个功能。地址:https://github.com/wenlonghuo/xmocker-cli。原理是利用koa的洋葱圈模型,请求经过的路线如图所示。

mock流程图
流程比较简单,基本能达到我们的目的。同时,该Mock服务开启服务时启动gulp参数,为html注入脚本便于利用接口进行页面刷新(在安卓微信下不生效,总是从缓存中读取。另个对于劫持的域名也是无效的)。使用mocker start xx(项目简称)就可以启动项目了。启动后在项目列表页设置404代理模式为混合模式,添加必要的API。同时在项目信息中填写404代理地址为 https://server.example.com,提交即可。此时访问局域网内的网址就可以发现API和网页均是优先访问本地,404会请求服务器,达到了Mock的目的。
3. 调试
同时完成步骤1和2后,微信中将链接发给自己的手机端,为正常访问服务端的地址,你会发现,网页和请求都是经由本机的Mock服务转发的。开始修改页面,手动刷新就可以看效果了。经测试,微信的上传图片认证是可以通过的,利用这个功能我实现了本机代码上传图片功能,完美的绕开了微信的认证。
4. 总结
利用的https劫持实现的调试,告诉了我们一件事:不认识的证书千万别乱安装!!一旦手机上安装了未知来源的证书,https劫持是很容易的事,数据修改获取完成不在话下。另外,nodejs开发工具还是挺快速的,想要什么功能,只要逻辑走得通,实现起来很容易。
利用fiddler和mock调试本地微信网页的更多相关文章
- 使用eclipse+fiddler+微信web开发者工具调试本地微信页面
		
前面已经说了调试服务器上的微信页面,放链接:http://www.cnblogs.com/Gabriel-Wei/p/5977850.html 还有fiddler调试链接:http://www.cnb ...
 - Java代码里利用Fiddler抓包调试设置
		
Fiddler启动时已经将自己注册为系统的默认代理服务器,应用程序在访问网络时会去获取系统的默认代理,如果需要捕获java访问网络时的数据,只需要在启动java程序时设置代理服务器为Fiddler即可 ...
 - 利用Fiddler或Charles进行mock数据
		
使用场景:服务器数据不符合测试条件时,我们可以通过在本地创建虚拟数据来打到测试用例所描述的条件. fiddler使用方法 1.首先在本地创建txt数据:将抓到的response中的json数据拷贝到记 ...
 - 利用Fiddler或Charles进行mock数据创造测试环境
		
使用场景:服务器数据不符合测试条件时,我们可以通过在本地创建虚拟数据来打到测试用例所描述的条件. fiddler使用方法 1.首先在本地创建txt数据:将抓到的response中的json数据拷贝到记 ...
 - 【前端开发】利用Fiddler抓包工具进行本地调试
		
解决什么问题: 解决前端在本地联调页面 || 样式 || 脚本时经常修改服务器代码,浪费太多时间. 避免多人同时修改代码产生冲突问题.可以在本地调完代码之后,再贴到服务器上. 其实这个问题老早就开始想 ...
 - 利用fiddler将本地网页放到某个域下
		
注: 1)在学习慕课网课程<搜索框制作>中遇到如题困难,查找资料后解决,做此记录.课程网址http://www.imooc.com/video/263. 2)建议同时去学习慕课网课程< ...
 - 技术方案:在外部网址调试本地js(基于fiddler)
		
1 解决的问题 1) 场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...
 - 使用Fiddler搭建手机调试环境(我做得项目是调试微信的公众号)
		
部分内容参考:http://ju.outofmemory.cn/entry/22854 我们在测试微信企业号的时候,由于微信的限制,不能把它拿到chrome浏览器中进行调试,所以就不能实时的看到页面变 ...
 - Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
		
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
 
随机推荐
- 修改Weblogic jdk版本
			
找到 F:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin setDomainEnv.cmd
 - P2045 方格取数加强版
			
P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...
 - 企业级分布式存储应用与实战-mogilefs实现
			
Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...
 - jquery与js添加子元素
			
例如在select中添加option JQuery做法: <select id="myselect" name="myselect"> </s ...
 - 《struts2》:指定多个配置文件和默认Action
			
转载:http://m.blog.csdn.net/article/details?id=51212968
 - Android开发之蓝牙Socket
			
蓝牙Server端就是通过线程来注册一个具有名称和唯一识别的UUID号的BluetoothServerSocket, 然后就一直监听Client端(BluetoothSocket)的请求,并对这些请求 ...
 - 【转载】Linux时间相关结构与函数
			
1 时间的获取 在程序当中, 我们经常要输出系统当前的时间,比如日志文件中的每一个事件都要记录其产生时间.在 C 语言中获取当前时间的方法有以下几种,它们所获得的时间精度从秒级到纳秒,各有所不同. 表 ...
 - 4个强大的Linux服务器监控工具[转]
			
本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以显示单个进程所使用的带 ...
 - MTU,MSS基本概念
			
传输层: 对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515: 对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment ...
 - 浅探element-ui2组件源码之upload
			
最近不小心更新了element-ui的版本,已经到了2.1.0,以前修改的源码都失效了. 于是重新尝试下面的指令重新修改: git clone https://github.com/ElemeFE/e ...