原文:https://blog.csdn.net/zhang116868/article/details/49406599

大名鼎鼎的Fiddler大家都知道,或者用过,Fiddler 开放了他的FiddlerCoreAPI  提供给开发者调用,来处理所有的http请求,功能就如Fiddler一样强大,下面我们来简单介绍一下。

程序类库官网下载地址:http://fiddler.wikidot.com/fiddlercore-api

官网上下的是exe安装文件,比较麻烦,因此笔者上传了一个安装后提取出来的库,包括.net 2.0、4.0两个运行环境版本和一个简单的实例。
下载地址:http://download.csdn.net/detail/zhang116868/9211923

接下来我们根据官方提供的SampleApp实例来进行讲解。

启动方法:

  1. //设置别名
  2. Fiddler.FiddlerApplication.SetAppDisplayName("FiddlerCoreDemoApp");
  3. //启动方式
  4. FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default;
  5. //定义http代理端口
  6. int iPort = 8877;
  7. //启动代理程序,开始监听http请求
  8. //端口,是否使用windows系统代理(如果为true,系统所有的http访问都会使用该代理)
  9. Fiddler.FiddlerApplication.Startup(iPort, true, false, true);
  10. // 我们还将创建一个HTTPS监听器,当FiddlerCore被伪装成HTTPS服务器有用
  11. // 而不是作为一个正常的CERN样式代理服务器。
  12. oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname);

停止方法:

  1. if (null != oSecureEndpoint) oSecureEndpoint.Dispose();
  2. Fiddler.FiddlerApplication.Shutdown();
  3. Thread.Sleep(500);

如果占用了系统代理,那么一定要记得如此退出,不然系统代理不会被释放,你将不能再打开网页。

接下来介绍拦截http请求的处理:

  1. //定义会话,每一个请求都将封装成一个会话
  2. List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();
  3. //请求出错时处理
  4. Fiddler.FiddlerApplication.BeforeReturningError += FiddlerApplication_BeforeReturningError;
  5. //在发送请求之前执行的操作
  6. Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
  7. {
  8. //请求的全路径
  9. Console.WriteLine("Before request for:\t" + oS.fullUrl);
  10. // 为了使反应篡改,必须使用缓冲模式
  11. // 被启用。这允许FiddlerCore以允许修改
  12. // 在BeforeResponse处理程序中的反应,而不是流
  13. // 响应给客户机作为响应进来。
  14. Debug.WriteLine(oS.RequestBody);
  15. oS.bBufferResponse = true;
  16. Monitor.Enter(oAllSessions);
  17. oAllSessions.Add(oS);
  18. Monitor.Exit(oAllSessions);
  19. oS["X-AutoAuth"] = "(default)";
  20. /* 如果请求是要我们的安全的端点,我们将回显应答。
  21. 注:此BeforeRequest是越来越要求我们两个主隧道代理和我们的安全的端点,
  22. 让我们来看看它的Fiddler端口连接到(pipeClient.LocalPort)客户端,以确定是否该请求
  23. 被发送到安全端点,或为了达到**安全端点被仅仅发送到主代理隧道(例如,一个CONNECT)。
  24. 因此,如果你运行演示和参观的https://本地主机:7777在浏览器中,你会看到
  25. Session list contains...
  26. 1 CONNECT http://localhost:7777
  27. 200                                         <-- CONNECT tunnel sent to the main proxy tunnel, port 8877
  28. 2 GET https://localhost:7777/
  29. 200 text/html                               <-- GET request decrypted on the main proxy tunnel, port 8877
  30. 3 GET https://localhost:7777/
  31. 200 text/html                               <-- GET request received by the secure endpoint, port 7777
  32. */
  33. //oS.utilCreateResponseAndBypassServer();
  34. //oS.oResponse.headers.SetStatus(200, "Ok");
  35. //string str = oS.GetResponseBodyAsString();
  36. //oS.utilSetResponseBody(str + "aaaaaaaaaaaaaaaaaaaaa");
  37. if ((oS.oRequest.pipeClient.LocalPort == iSecureEndpointPort) && (oS.hostname == sSecureEndpointHostname))
  38. {
  39. oS.utilCreateResponseAndBypassServer();
  40. oS.oResponse.headers.SetStatus(200, "Ok");
  41. oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
  42. oS.oResponse["Cache-Control"] = "private, max-age=0";
  43. oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString());
  44. }
  45. //if ((oS.oRequest.pipeClient.LocalPort == 8877) && (oS.hostname == "www.baidu.com"))
  46. //{
  47. //    string url = oS.fullUrl;
  48. //    oS.utilCreateResponseAndBypassServer();
  49. //    oS.oResponse.headers.SetStatus(200, "Ok");
  50. //    oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
  51. //    oS.oResponse["Cache-Control"] = "private, max-age=0";
  52. //    oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString());
  53. //}
  54. };
  55. /*
  56. // 下面的事件,您可以检查由Fiddler阅读每一响应缓冲区。
  57. *     请注意,这不是为绝大多数应用非常有用,因为原始缓冲区几乎是无用的;它没有解压,它包括标题和正文字节数等。
  58. //
  59. // 本次仅适用于极少数的应用程序这就需要一个原始的,未经处理的字节流获取有用
  60. Fiddler.FiddlerApplication.OnReadResponseBuffer += new EventHandler<RawReadEventArgs>(FiddlerApplication_OnReadResponseBuffer);
  61. */
  62. Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS) {
  63. // 取消以下两条语句解压缩/ unchunk的
  64. //HTTP响应,并随后修改任何HTTP响应,以取代
  65. //单词“微软”和“Bayden”的实例。 你必须如此设置:
  66. // set bBufferResponse = true inside the beforeREQUEST method above.
  67. //
  68. oS.utilDecodeResponse();
  69. // 内容:{3} , oS.GetResponseBodyEncoding().GetString(oS.responseBodyBytes)
  70. Console.WriteLine("{0}:HTTP {1} for {2}", oS.id, oS.responseCode, oS.fullUrl);
  71. Console.WriteLine(oS.GetResponseBodyAsString());
  72. Debug.WriteLine(oS.GetResponseBodyAsString());
  73. //bool r = oS.utilReplaceInResponse("1.欢迎使用!", "aaaaaaaaaaaaaaaaaaaaaa");
  74. //Console.WriteLine(r);
  75. };
  76. Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session oS)
  77. {
  78. //Console.WriteLine("Finished session:\t" + oS.fullUrl);
  79. Console.Title = ("Session list contains: " + oAllSessions.Count.ToString() + " sessions");
  80. };

作为学习,注释的代码也很重要,大家有必要拿出来运行一下,看看结果。

FiddlerCoreAPI 使用简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. docker中的安全机制

    有时候我们需要容器具有更多的权限,像如操作内核模块,控制swap交换分区,挂载usb磁盘,修改mac地址等.所以我们今天进行docker的安全设定. 一.使用docker命令设置docker的安全机制 ...

  2. 使用API接口在zabbix系统中登陆、创建、删除agent

    一.API的介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力 ...

  3. oracle主从表主外键对应关系

    一.首先让我们来了解下什么是主外键? 1.主键:唯一标识数据表中的某一行 1) 一个表中只能有一个主键.如果在其他字段上建立主键,则原来的主键就会取消.在ACCESS中,虽然主键不是必需的,但最好为每 ...

  4. Ubuntu:搜狗输入法不能输入中文

    搜狗输入法不能输入中文 问题描述 可以打开搜狗输入法,可以打英文,但是不能切换成中文. 其他输入法正常使用(这个可以判断是不是fcitx是不是出现错误). 有一个关于sogou的内部错误提示 解决方法 ...

  5. kafka知识点整理总结

    kafka知识点整理总结 只不过是敷衍 2017-11-22 21:39:59 kafka知识点整理总结,以备不时之需. 为什么要使用消息系统: 解耦 并行 异步通信:想向队列中放入多少消息就放多少, ...

  6. 添加react-router

    1.index.js 内容: import React from 'react' import ReactDOM from 'react-dom' import { renderRoutes } fr ...

  7. 神经网络损失函数中的正则化项L1和L2

    神经网络中损失函数后一般会加一个额外的正则项L1或L2,也成为L1范数和L2范数.正则项可以看做是损失函数的惩罚项,用来对损失函数中的系数做一些限制. 正则化描述: L1正则化是指权值向量w中各个元素 ...

  8. markdown添加本地图片

    这是个坑 如果你的markdown在一个文件目录下,需要添加另一个目录下的图片,绝对路径是不可行的.需要 "迂回" 所谓 迂回,即需要先用../../命令返回上一文件目录,直至可以 ...

  9. google-protobuf安装详解

    前言 编译调试项目的过程中涉及到caffe的编译,提示没有安装protobuf的错误,本文详解protobuf的安装: 问题描述 解决步骤 1.查看google protobuf的github,没有直 ...

  10. HDU 2544:最短路

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...