利用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 代替 ...
随机推荐
-
SpringMVC @ModelAttribute注解
/** * 1. 有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用! * 2. @ModelAttribute 注解也可以来修饰 ...
-
EXT学习之——Ext下拉框绑定无效的问题
1.保证store定义是否在combobox前面 2.有没写 .load 3.有没赋值 xxstore:xxstore 具体看详细步骤 http://www.cnblogs.com/wdw3121 ...
-
HDU 4430 Yukari&#39;s Birthday(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430 题目大意:给定n个蜡烛,围绕蛋糕的中心插同心圆,从里往外分别是第1圈.第2圈....第r圈,第 ...
-
如何解决jquery版本冲突
<!-- 引入1.6.4版的jq --> <script src="<a href="http://ajax.googleapis.com/ajax/lib ...
-
CentOS-6.5-x86_64 最小化安装,已安装包的总数,这些包?
一.我们怎么知道有多少的包被安装? [root@localhost ~]# rpm -qa | wc -l 217 二.怎样得知安装了那些软件包? [root@localhost ~]# rpm -q ...
-
Linux分区规划与xshell使用排错
1.1 没有重要数据 /boot 200M 存放系统的引导信息 内核 swap 交换分区 防止内存用光了 临时的一个内存 如果你的内存小于8G swap是内存的1.5倍 如果你的 ...
-
初识RabbitMQ系列之三:.net 如何使用RabbitMQ
话不多说,直接上代码! 一:搭建一个解决方案框架:RabbitMQ_Demo 其中包含4个部分: 1:RabbitMQ 公用类库项目 2:一个生产者控制台项目 3:两个消费者控制台项目 项目结构如图: ...
-
Java基础——JSP(二)
一.JSP隐式对象概述 为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象. 在 jsp生成的Servlet源码中,有如下声明: publi ...
-
POJ 2291
#include<iostream> #include<stdio.h> using namespace std; int compare(void const *,void ...
-
两天学会DirectX 3D之第二天
提要 前几天非常easy地跑了一个DirectX 9 程序,以为DirectX就那么绘制,事实证明有点Naive了. 之前的那个程序最多也就是个固定流水线的东西. 可是今天要用DirectX11来写一 ...