利用fiddler和mock调试本地微信网页

微信公众号网页是比较特殊的页面,普通页面直接打开即可访问,但对于需要请求微信相关接口的部分需要安全域名认证。这导致了使用mock数据进行开发的页面没办法走完整个流程,还是需要把代码发布到服务器上才可以测试。而发布服务器的速度总是要时间的,每次修改都发布服务器耗时较长,大大延长了开发时间。使用一种本地开发的技术就比较重要了。

https是一种安全的认证,我们要进行伪造数据进行劫持的话就必需自签证书,通过系统信任就可以将https的数据指向任何我们想要的服务上。利用这个特性,调试微信网页就极为简单了。本文针对的是传统的静态网页,针对的是增量开发时的调试,全新的业务不适用于此方案,SPA网页可能需要其他工具,但原理是相同的。

1. 开启域名劫持

fiddler是一款极为强大的软件,可对数据进行抓取和代理。要实现域名劫持,就要利用工具进行配置。

  1. fiddler基础配置。网上教程有很多,具体配置就不讲了。关键点在于配置好https劫持,并在调试的手机上下载fiddler的证书进行安装。这一部分都是通用的,很容易做到。在配置完成可以对微信网页进行抓包后,查看是否所有的网页请求已经在fiddler中出现了。
  2. 配置域名代理。在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服务要满足以下几个条件:

  1. 能够对开发过程中网页进行增量构建。这个过程比较重要,全量构建导致构建速度过慢,不利于开发过程中快速调试。
  2. 能够对构建生成的文件提供静态资源服务。
  3. 能够提供404请求代理至服务器。
  4. 指定的API代理至指定的服务器。
  5. 能够提供便于编辑的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调试本地微信网页的更多相关文章

  1. 使用eclipse+fiddler+微信web开发者工具调试本地微信页面

    前面已经说了调试服务器上的微信页面,放链接:http://www.cnblogs.com/Gabriel-Wei/p/5977850.html 还有fiddler调试链接:http://www.cnb ...

  2. Java代码里利用Fiddler抓包调试设置

    Fiddler启动时已经将自己注册为系统的默认代理服务器,应用程序在访问网络时会去获取系统的默认代理,如果需要捕获java访问网络时的数据,只需要在启动java程序时设置代理服务器为Fiddler即可 ...

  3. 利用Fiddler或Charles进行mock数据

    使用场景:服务器数据不符合测试条件时,我们可以通过在本地创建虚拟数据来打到测试用例所描述的条件. fiddler使用方法 1.首先在本地创建txt数据:将抓到的response中的json数据拷贝到记 ...

  4. 利用Fiddler或Charles进行mock数据创造测试环境

    使用场景:服务器数据不符合测试条件时,我们可以通过在本地创建虚拟数据来打到测试用例所描述的条件. fiddler使用方法 1.首先在本地创建txt数据:将抓到的response中的json数据拷贝到记 ...

  5. 【前端开发】利用Fiddler抓包工具进行本地调试

    解决什么问题: 解决前端在本地联调页面 || 样式 || 脚本时经常修改服务器代码,浪费太多时间. 避免多人同时修改代码产生冲突问题.可以在本地调完代码之后,再贴到服务器上. 其实这个问题老早就开始想 ...

  6. 利用fiddler将本地网页放到某个域下

    注: 1)在学习慕课网课程<搜索框制作>中遇到如题困难,查找资料后解决,做此记录.课程网址http://www.imooc.com/video/263. 2)建议同时去学习慕课网课程< ...

  7. 技术方案:在外部网址调试本地js(基于fiddler)

    1 解决的问题 1)        场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...

  8. 使用Fiddler搭建手机调试环境(我做得项目是调试微信的公众号)

    部分内容参考:http://ju.outofmemory.cn/entry/22854 我们在测试微信企业号的时候,由于微信的限制,不能把它拿到chrome浏览器中进行调试,所以就不能实时的看到页面变 ...

  9. Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】

    主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...

随机推荐

  1. Java数据持久层框架 MyBatis之API学习七(动态 SQL详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  2. 一分钟搭建Vue2.0+Webpack2.0多页面项目

    想要自己一步步搭建的比较麻烦,不是很推荐,最少也要使用vue-cli,在其基础上开始搭建,今天我的主题是一分钟搭建,那么常规方法肯定不能满足的, 而我用的方法也很简单,就是使用已经配置完成的demo模 ...

  3. VMware虚拟机上建立HTTP服务步骤

    1.使用xshell连接虚拟机,也可直接在虚拟机中敲命令. 以下是xshell上的命令: 首先安装HTTPD包 [root@one ~]# mount /dev/sr0 /mnt[root@one ~ ...

  4. TP手册学习第二天

    默认情况下,URL是不区分大小写的,访问规则:--模块/控制器/操作/参数/值,如果要访问驼峰法的控制器类BlogTest,则需要使用:blog_test MVC是一个设计模式,它强制性的使应用程序的 ...

  5. 封装的应用【example_Array工具】

    定义一个数组工具[ArrayTool]封装其方法,ArrayDemo调用数组工具ArrayTool package new_Object; //封装多个个功能 class ArrayTool{ //1 ...

  6. oracle如何操作约束

    自我总结,欢迎怕转! 约束的作用不多说了,直接看怎么用吧. 非空约束: 在创建表时设置非空约束: CREATE TABLE table_name( column_name datatype NOT N ...

  7. PHP定义字符串的四种方式

    1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...

  8. JAVA设计模式---命令模式

    1.定义: 将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象,命令模式也支持可撤销的操作.命令可以用来实现日志和事务系统. 2.实例: 1)需求:设计一个家电遥控器的API,遥控 ...

  9. 安装RRDtool 1.4.5

    安装rrdtoolRrdtool安装需要cairo.libxml2.pango库支持,可通过yum安装安装libart_lgpl-devel这个包yum -y install libart_lgpl- ...

  10. MySQL完全备份、增量备份与恢复[转]

    原文链接:http://www.360doc.com/content/11/1209/09/834950_170836197.shtml 场景:每周日执行一次完全备份,每天下午1点执行增量备份 [ 适 ...