利用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. SecurityException

    摘录自http://www.cnblogs.com/haorenjie/archive/2012/09/12/2682655.html public boolean checkNetwork() { ...

  2. 爬虫利器BeautifulSoup模块使用

    一.简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,同时应用场景也是非常丰富,你可以使用 ...

  3. Unix/Linux命令:SED

    在Unix/Linux系统中,sed命令采用逐行处理的方式对文件进行查找.删除.替换.添加.插入等操作. 语法:sed [OPTION]... {script-only-if-no-other-scr ...

  4. mybatis中@Param的用法和作用

    用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 我们先来看Mapper接口中的@Select方法 package Ma ...

  5. Universe Design Tool Using JDBC connect Sybase/Oracle Get Error

    一.针对Sybase 1 使用SAP Universe 设计工具连接Sybase数据库报错,报错如下: “CS: Java Class not found in classpath : com.syb ...

  6. Spark 读写hive 表

    spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...

  7. 转 intValue()的用法

    intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它. 不单是Integer有intValue方法,Double,Long等都有此方 ...

  8. Jquery实现弹出层效果

    <script type="text/javascript"> $(document).ready(function(){ $('.one').click(functi ...

  9. webpack 介绍 & 安装 & 常用命令

    webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...

  10. jdk源码->多线程->Thread

    线程的创建 java提供了三种创建线程的方法: 通过继承 Thread 类本身: 通过实现 Runnable 接口: 通过 Callable 和 Future 创建线程. 继承Thread类 步骤: ...