利用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 代替 ...
随机推荐
- 监控服务器ssh登录,并发送报警邮件
最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控.实现方式并不难. 一:邮箱申请开启SMTP 在邮箱中选择“设置”----->“账户” 在如下图处开启POP3/SMTP服务,并生 ...
- Debugging java application with netbean
Debugging Java Applications with NetBeans from:https://manikandanmv.wordpress.com/2009/09/24/debu ...
- php 利用Gd库添加文字水印乱码的问题及解决方案
最近一个项目进行了服务器迁移,部署后发现 ,其中一个为图片添加水印文字的功能出现了乱码问题,确认功能代码不存在问题,同时项目代码都是使用UTF-8编码,不存在编码问题,也检查排除了字体文件出现问题的可 ...
- mybatis 中文文档
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
- MySQL备份利器-xtrabackup的介绍和原理(附脑图)
标签(linux): mysql-xtrabackup 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 xtrabackup是Percona公司针对mysql数据 ...
- WindowXp-Windows7-Windows运行命令(转)
Win7里面按 Win+R 呼出运行界面,一下是它的一些常用命令: 1.cleanmgr: 打开磁盘清理工具 2.compmgmt.msc: 计算机管理 3.conf: 启动系统配置实用程序 4.ch ...
- bzoj 4562 [Haoi2016]食物链
4562: [Haoi2016]食物链 Time Limit: 10 Sec Memory Limit: 128 MB Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 ...
- mysql 我们眼中的int(10)
自我总结,欢迎拍砖! 目的:定义int(3)和int(10)真的有区别吗? 论证: 1.创建student,student2表 分别定义一个student,student2表 create table ...
- Effective Java 之-----谨慎的覆盖clone方法
1.概述 如果clone方法返回一个由构造器创建的对象,它就得到有错误的类.因此,如果覆盖了非final类中的clone方法,则应该返回一个通过调用super.clone得到的对象.如果类的所有超类都 ...
- rapid framework开发系列(一)
定义:web项目脚手架 rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hiberna ...