0、写在前面的话

之前看了阮一峰老师关于互联网协议入门的博客,受益匪浅,接着再去体会了下HTTP协议,就想着看实际网络访问中的那些HTTP请求头和响应是什么样的。Chrome的调试工具的Network选项其实已经够用了,但是其格式为了方便观看做了调整,我想看原生的,就从网友处得知了比较专业的抓包工具:Fiddler。

基本使用还是比较简单的,可以直接参考博客《Fiddler 教程》。这里想要吐槽的是,本人电脑的不知道什么环境导致的Fiddler无法抓取网页的https请求,这个设置是可以直接在软件上打开的,然而我的电脑始终开启后不生效,各种谷歌各种调鼓捣了超过4h仍然无果!现在那么多网站都开始用https,不能抓取https的抓包工具岂不是逐渐成为一只咸鱼了。而我在同事同样的win10 x64电脑同版本Fiddler设置抓取https,只按照普通设置花了大概3min不到就OK了,我的心态是崩溃的,谢谢。

另外,本文涉及的如何让手机端也能在电脑上通过Fiddler抓包分析,请参考链接《fiddler 手机 https 抓包》,主要参考文中的代理设置部分,如果不是抓取https,其他的如证书安装可以略过。

1、背景介绍

之前看到一篇博客关于Fiddler的好处在于可以在实际线上环境调整脚本代码,即拦截脚本,本地修改后返回,在真实的环境下去调试,从而最大限度的减少bug发生的可能性。没想到,昨天晚上就给我遇到了,老大问我公众号的微信绑定为什么点击确定按钮之后没有反应,最终定位发现绑定在后台是生效了,Ajax反馈前端的响应前端也收到了,问题在于回调函数。
$(function(){
//绑定
$("#bound").click(function() {
var username = $("#username").val();
var password = $("#password").val();
if(username.trim() == "" || password.trim() == "") {
weui.topTips('用户名或密码不得为空', 1500);
return;
}
$().invoke("/weChat/grading/do/checkDepartment.q", {username:username, password:password}, function(re) {
if(re == 'error') {
weui.topTips('用户名或密码错误', 1500);
} else {
weui.confirm('绑定考级点:' + re,
//确定
function() {
$().invoke("/weChat/grading/do/bound.q", {username:username, password:password}, function(re) {
if('success' == re) {
weui.alert('绑定成功', function() {
wx.closeWindow();
});
} else {
weui.alert(re);
}
});
},
//取消
function() {
//none
});
}
});
});
});
 
1
$(function(){  
2
    //绑定
3
    $("#bound").click(function() {
4
        var username = $("#username").val();
5
        var password = $("#password").val();
6
        if(username.trim() == "" || password.trim() == "") {
7
            weui.topTips('用户名或密码不得为空', 1500);
8
            return;
9
        }
10
        $().invoke("/weChat/grading/do/checkDepartment.q", {username:username, password:password}, function(re) {
11
            if(re == 'error') {
12
                weui.topTips('用户名或密码错误', 1500);
13
            } else {
14
                weui.confirm('绑定考级点:' + re,
15
                        //确定
16
                        function() {
17
                            $().invoke("/weChat/grading/do/bound.q", {username:username, password:password}, function(re) {
18
                                if('success' == re) {
19
                                    weui.alert('绑定成功', function() {
20
                                        wx.closeWindow();
21
                                    });
22
                                } else {
23
                                    weui.alert(re);
24
                                }
25
                            });
26
                        },
27
                        //取消
28
                        function() {
29
                            //none
30
                        });
31
            }
32
        });
33
    });
34
});

2、方法1:Fiddler断点抓包改响应

既然大概知道是回调函数出了问题,那么先来判断是回调函数没有调用,还是回调函数中的方法没生效,还是条件进入出现了问题。

Fiddler可以在响应返回之前的“请求之前”和“请求之后”两种状态进行断点,分别可以修改即将发送出去的请求和即将返回的响应,两种方式在命令行的表示分别为:
  • bpu
  • bpafter

我们要改返回的脚本,所以也就是“请求之后”,则在命令行输入 bpafter {url}:
 
在进入绑定页面的时候,可以看到已经对该部分进行了拦截:
 
我们直接在响应中修改代码,增加两行alert用以判定函数失效的位置,修改完成后,直接点击Run to Completion即可:
 
结果两个alert都触发了,那么问题出在哪呢,显然就是weui.alert的问题了:


weui.alert方法是微信官方提供的js文件,而且我在本地运行,通过微信测试号进行测试时是ok的,客户的公众号正式上线之后,也测试是ok的,现在突然莫名其妙就不生效了,你说气不气?关键是我再次用测试号进行测试,还是有效的,就是在正式环境不行,我不懂,不知道是服务器环境问题,还是正式公众号和测试公众号有什么区别。所以这就是能在所谓真实线上环境调试才能尽可能减少bug的原因吧,谜,得烧香。 

接下来其实可以继续使用这个方法进行调试修改,为了介绍另一种方式,接下来的修改就采用自动拦截的方式,不过记得先清除之前的断点拦截,输入bpafter不带url即可清除:
 

3、方法2:Fiddler自动拦截改响应

Fiddler可以设置规则,自动对符合条件的url请求进行拦截,并返回指定的响应。这意味着我们可以把内容直接写在本地的一个文件里,自动拦截设置为返回该文件,所以我们每次调试代码只需要修改本地文件即可,这样一来:
  • 环境仍然是真实的服务器环境
  • 本地修改不会影响服务器的文件,也不会影响其他人的请求
  • 本地可以修改存储,比断点修改调试要方便很多

先把代码写在本地的一个txt文件中,因为是作为响应返回,所以不能单纯是文件内容,还应该加上响应头,文件内容只是作为响应内容体:
 
接下来设置自动拦截响应:
  • 找到AutoResponder页面
  • 点击Add Rule添加拦截规则
  • 编辑拦截规则,分别对应拦截的url和返回的响应内容
  • 选择启用规则Enable rules

好了,接下来我们直接修改本地文件的内容。既然weui.alert在线上有问题,那么我们用它其他的api,比如weui.toast:
 
保存好文件,再次访问页面,可以看到fiddler的响应中,确实返回的是我们本地文件的内容:
 
发现weui.toast在线上可以正常运行:

 
那么调试ok以后,直接把服务器上的内容按调试后的代码进行修改重新部署,就行了。

fiddler的两种方式修改响应,是不是很方便呢?



Fiddler抓包调试前端脚本代码的更多相关文章

  1. jmeter+Fiddler:通过Fiddler抓包生成jmeter脚本

    Fiddler是目前最常用的抓包工具之一,它作为客户端和服务器端之间的代理,记录客户端和服务器之间的所有请求(http/https),可以针对特定的请求过滤,分析请求和响应的数据.设置断点.调试.修改 ...

  2. 使用Fiddler抓包调试https下的页面

    众所周知https技术诞生以来,一个很重要的作用就是加密通信内容.所以在项目团队将业务站点实施完https改造以后,原先使用fiddler进行抓包的美好生活到头了.其实fiddler本身是支持对于ht ...

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

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

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

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

  5. 关于fiddler抓包一键生成python脚本

    本人贡献一篇关于抓包转换成脚本的文章 步骤一 打开fiddler,抓到包之后,保存成txt文件 步骤二 脚本里str_filename改成保存的文件名 步骤三 执行脚本一键转换 附上脚本,感谢关注~ ...

  6. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  7. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  8. Fiddler抓包工具使用详解

    一.Fiddler简介 Fiddler是最强大最好用的Web调试工具之一, 它能记录所有客户端和服务器的http和https请求.允许你监视.设置断点.甚至修改输入输出数据.Fiddler包含了一个强 ...

  9. Fiddler抓包工具使用方法

    Fiddler是最强大最好用的Web调试工具之一, 它能记录所有客户端和服务器的http和https请求.允许你监视.设置断点.甚至修改输入输出数据.Fiddler包含了一个强大的基于事件脚本的子系统 ...

随机推荐

  1. 【代码笔记】iOS-FMDBDemo

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> #import "FMDatabase.h" ...

  2. Linux 操作方法(一)

    cd +地址 ->可进入地址 cd .. ->返回上级 ll ->显示当前目录下的所有文件(显示所有文件,包括隐藏,还有显示文件信息) ls ->显示当前目录下的所有文件 su ...

  3. js常用正则收集

    1:非纯空白字符串且长度大于1:     /^\s*\S+[\s\S]*$/ 右侧可以正常匹配:“     11 1        1     a      ”  .“    1      aa” . ...

  4. ActiveReports 报表应用教程 (10)---交互式报表之向下钻取(详细数据按需显示解决方案)

    在葡萄城ActiveReports报表中可以动态的显示或者隐藏某区域的数据,通过该功能用户可以根据需要显示或者隐藏所关心的数据,结合数据排序.过滤等功能可以让用户更方便地分析报表数据. 本文中展示的是 ...

  5. Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息

    Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息   by:授客 QQ:1033553122 1.  查看内存信息 1)查看所有内存信息 命令: dumpsys mem ...

  6. Android4.4中jni的native的方法无法找到的解决方案

    1.禁用代码混淆功能 LOCAL_PROGUARD_ENABLED:= disabled 2.修改混淆规则,对于类的native 方法 不要进行混淆

  7. 控制台输出 mybatis 中的sql语句

    控制台输出 mybatis 中的sql语句 在 log4j.xml 文件中 增加如下配置 <!-- mybatis 输出的sql,DEBUG级别 --> <logger name=& ...

  8. 如何避免SHRINKDATABASE & SHRINKFILE 产生索引碎片(转载)

    1. TRUNCATEONLY参数的使用我们在建立的Job中通常使用如下的语法DBCC SHRINKDATABASE (N'DB', 10,TruncateOnly)其中TruncateOnly的用处 ...

  9. myeclipse 10配置jboss 7.1.1无法启动Error: Could not create the Java Virtual Machine

    myeclipse 10中配置jboss 7.1.1,多写了个server name,结果死活启动不了.后来,发现了这个细节. 错误显示: 错误源头: 删掉Server name后,可以完美启动 小问 ...

  10. shell 的echo和 printf

    shell的echo指令是输出语句  就好比Python的print 在显示字符串的时候可以省略双引号  但是最好还是带上 echo ' Ti is a dashaobing' echo Ti is ...