写点什么

Python 进阶 (三十五)Fiddler 命令行和 HTTP 断点调试

  • 2022-11-14
    江苏
  • 本文字数:1992 字

    阅读完需:约 7 分钟

Python进阶(三十五)Fiddler命令行和HTTP断点调试

一、Fiddler 内置命令

上一节(使用 Fiddler 进行抓包分析)中,介绍到,在 web session(与我们通常所说的 session 不是同一个概念,这里的每条 HTTP 请求都称为一个 session)。界面中可以看到 Fiddler 抓取的所有 HTTP 请求.而为了更加方便的管理所有的 session, Fiddler 提供了一系列内置的函数用于筛选和操作这些 session(习惯命令行操作 Linux 的童鞋应该可以感受到这会有多么方便).输入命令的位置在 web session 管理面板的下方(通过快捷键 alt+q 可以 focus 到命令行).


Fiddler 内置的命令有如下几种:

1.1 select 命令

选择所有相应类型(指 content-type)为指定类型的 HTTP 请求,如选择图片,使用命令 select image.而 select css 则可以选择所有相应类型为 css 的请求,select html 则选择所有响应为 HTML 的请求(怎么样,是不是跟 SQL 语句很像?)。如图是执行 select image 之后的结果:


1.2 allbut 命令

allbut 命令用于选择所有响应类型不是给定类型的 HTTP 请求。如 allbut image 用于选择所有相应类型不是图片的 session(HTTP 请求),该命令还有一个别名 keeponly.需要注意的是,keeponly 和 allbut 命令是将不是该类型的 session 删除,留下的都是该类型的响应。因此,如果你执行 allbut xxxx(不存在的类型),实际上类似与执行 cls 命令(删除所有的 session, ctrl+x 快捷键也是这个作用)。

1.3 ?text 命令

选择所有 URL 匹配问号后的字符的全部 session。

1.4 >size 和 <size 命令

选择响应大小大于某个大小(单位是 b)或者小于某个大小的所有 HTTP 请求。

1.5 =status 命令

选择响应状态等于给定状态的所有 HTTP 请求。


例如,选择所有状态为 200 的 HTTP 请求:=200

1.6 @host 命令

选择包含指定 HOST 的全部 HTTP 请求。


例如:@csdn.NET 选择所有 host 包含 csdn.Net 的请求

1.7 Bpafter, Bps, bpv, bpm, bpu

这几个命令主要用于批量设置断点


  • Bpafter xxx: 中断 URL 包含指定字符的全部 session 响应

  • Bps xxx: 中断 HTTP 响应状态为指定字符的全部 session 响应。

  • Bpv xxx: 中断指定请求方式的全部 session 响应

  • Bpm xxx: 中断指定请求方式的全部 session 响应。等同于 bpv xxx

  • Bpu xxx:与 bpafter 类似。


当这些命令没有加参数时,会清空所有设置了断点的 HTTP 请求。更多的其他命令可以参考 Fiddler 官网手册。

二、使用 Fiddler 进行 HTTP 断点调试

这是 Fiddler 又一强大和实用的工具之一。通过设置断点,Fiddler 可以做到:


  • 修改 HTTP 请求头信息。例如修改请求头的 UA, Cookie, Referer 信息,通过“伪造”相应信息达到达到相应的目的(调试,模拟用户真实请求等)。

  • 构造请求数据,突破表单的限制,随意提交数据。避免页面 js 和表单限制影响相关调试。

  • 拦截响应数据,修改响应实体。


为什么以上方法是重要的?假设 js 前端程序员和服务器程序员是分工合作的,js 程序员想要调试 Ajax 请求的功能,这样便不必等待服务器端程序员开发好所有接口之后再开始开发 js 端的 ajax 请求功能,因为通过“模拟”真实的服务器端的响应,便可以保证功能的正确性,而服务器端开发程序员,只要保证最终的响应是符合规定的即可。这大大简化了程序开发的效率,当然也降低了不同业务线程序员联调的难度。


有两种方法设置断点:


  • 1.fiddler 菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有 HTTP 请求有效。 有两个断点位置:

  • a. before response。也就是发送请求之后,但是 Fiddler 代理中转之前,这时可以修改请求的数据。

  • b.after response。也就是服务器响应之后,但是在 Fiddler 将响应中转给客户端之前。这时可以修改响应的结果。

  • 2.命令行下输入。Bpafter xxx 或者 bpv,bpu,bpm 等设置断点。这种断点只针对特定类型的请求。


我们以本地的 web 项目为例,演示如何简单的设置 HTTP 断点:


1.首先设置 Firefox 的代理,使之可以抓取所有的 HTTP 请求(localhost 的请求,也可以在 filter 中设置只抓取 intranet 请求),设置如下图所示:



  • 这时用 web 打开本地的项目。页面的内容为:

  • 设置响应后断点(after response breakpoint),可以通过命令行设置:bpafter localhost。键入回车之后,web 再次访问文件,通过 Fiddler 的 web session 界面可以看到,请求已经被挂起来了,而 web 浏览器也一直处于加载的状态。观察右侧的 inspector 面板下,也出现了新的东西:

  • 这时我们就可以修改响应的信息了。修改过程为:


切换到 textView 子面板,选择需要修改的部分,然后点击 “run to complete“,便可回送修改后的响应。假设我们修改后的内容如下:



点击执行后,打开刚刚的 web 界面。可以看到的页面的变化。



可见,页面的响应已经有了相应的变化。这就是响应后断点。当然实际应用中,断点的设置和响应的修改会比这复杂的多,这里只是基本的示例。


终止断点的方式有:


  • 在 inspector 界面点击“run complete“即会终止本次 HTTP 请求的断点。

  • 输入 Go 命令,也会使得当前的请求跳过断点。

  • 在 rules->auto breakpoint 中 disabled 断点即可。总之,Fiddler 的断点功能非常强大,关于它的进一步学习和应用,需要一个不断积累和摸索的过程。

发布于: 刚刚阅读数: 3
用户头像

No Silver Bullet 2021-07-09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Python进阶(三十五)Fiddler命令行和HTTP断点调试_Python_No Silver Bullet_InfoQ写作社区