FiddlerCoreAPI 使用简介
原文: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实例来进行讲解。
启动方法:
- //设置别名
- Fiddler.FiddlerApplication.SetAppDisplayName("FiddlerCoreDemoApp");
- //启动方式
- FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default;
- //定义http代理端口
- int iPort = 8877;
- //启动代理程序,开始监听http请求
- //端口,是否使用windows系统代理(如果为true,系统所有的http访问都会使用该代理)
- Fiddler.FiddlerApplication.Startup(iPort, true, false, true);
- // 我们还将创建一个HTTPS监听器,当FiddlerCore被伪装成HTTPS服务器有用
- // 而不是作为一个正常的CERN样式代理服务器。
- oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname);
停止方法:
- if (null != oSecureEndpoint) oSecureEndpoint.Dispose();
- Fiddler.FiddlerApplication.Shutdown();
- Thread.Sleep(500);
如果占用了系统代理,那么一定要记得如此退出,不然系统代理不会被释放,你将不能再打开网页。
接下来介绍拦截http请求的处理:
- //定义会话,每一个请求都将封装成一个会话
- List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();
- //请求出错时处理
- Fiddler.FiddlerApplication.BeforeReturningError += FiddlerApplication_BeforeReturningError;
- //在发送请求之前执行的操作
- Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
- {
- //请求的全路径
- Console.WriteLine("Before request for:\t" + oS.fullUrl);
- // 为了使反应篡改,必须使用缓冲模式
- // 被启用。这允许FiddlerCore以允许修改
- // 在BeforeResponse处理程序中的反应,而不是流
- // 响应给客户机作为响应进来。
- Debug.WriteLine(oS.RequestBody);
- oS.bBufferResponse = true;
- Monitor.Enter(oAllSessions);
- oAllSessions.Add(oS);
- Monitor.Exit(oAllSessions);
- oS["X-AutoAuth"] = "(default)";
- /* 如果请求是要我们的安全的端点,我们将回显应答。
- 注:此BeforeRequest是越来越要求我们两个主隧道代理和我们的安全的端点,
- 让我们来看看它的Fiddler端口连接到(pipeClient.LocalPort)客户端,以确定是否该请求
- 被发送到安全端点,或为了达到**安全端点被仅仅发送到主代理隧道(例如,一个CONNECT)。
- 因此,如果你运行演示和参观的https://本地主机:7777在浏览器中,你会看到
- Session list contains...
- 1 CONNECT http://localhost:7777
- 200 <-- CONNECT tunnel sent to the main proxy tunnel, port 8877
- 2 GET https://localhost:7777/
- 200 text/html <-- GET request decrypted on the main proxy tunnel, port 8877
- 3 GET https://localhost:7777/
- 200 text/html <-- GET request received by the secure endpoint, port 7777
- */
- //oS.utilCreateResponseAndBypassServer();
- //oS.oResponse.headers.SetStatus(200, "Ok");
- //string str = oS.GetResponseBodyAsString();
- //oS.utilSetResponseBody(str + "aaaaaaaaaaaaaaaaaaaaa");
- if ((oS.oRequest.pipeClient.LocalPort == iSecureEndpointPort) && (oS.hostname == sSecureEndpointHostname))
- {
- oS.utilCreateResponseAndBypassServer();
- oS.oResponse.headers.SetStatus(200, "Ok");
- oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
- oS.oResponse["Cache-Control"] = "private, max-age=0";
- oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString());
- }
- //if ((oS.oRequest.pipeClient.LocalPort == 8877) && (oS.hostname == "www.baidu.com"))
- //{
- // string url = oS.fullUrl;
- // oS.utilCreateResponseAndBypassServer();
- // oS.oResponse.headers.SetStatus(200, "Ok");
- // oS.oResponse["Content-Type"] = "text/html; charset=UTF-8";
- // oS.oResponse["Cache-Control"] = "private, max-age=0";
- // oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString());
- //}
- };
- /*
- // 下面的事件,您可以检查由Fiddler阅读每一响应缓冲区。
- * 请注意,这不是为绝大多数应用非常有用,因为原始缓冲区几乎是无用的;它没有解压,它包括标题和正文字节数等。
- //
- // 本次仅适用于极少数的应用程序这就需要一个原始的,未经处理的字节流获取有用
- Fiddler.FiddlerApplication.OnReadResponseBuffer += new EventHandler<RawReadEventArgs>(FiddlerApplication_OnReadResponseBuffer);
- */
- Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS) {
- // 取消以下两条语句解压缩/ unchunk的
- //HTTP响应,并随后修改任何HTTP响应,以取代
- //单词“微软”和“Bayden”的实例。 你必须如此设置:
- // set bBufferResponse = true inside the beforeREQUEST method above.
- //
- oS.utilDecodeResponse();
- // 内容:{3} , oS.GetResponseBodyEncoding().GetString(oS.responseBodyBytes)
- Console.WriteLine("{0}:HTTP {1} for {2}", oS.id, oS.responseCode, oS.fullUrl);
- Console.WriteLine(oS.GetResponseBodyAsString());
- Debug.WriteLine(oS.GetResponseBodyAsString());
- //bool r = oS.utilReplaceInResponse("1.欢迎使用!", "aaaaaaaaaaaaaaaaaaaaaa");
- //Console.WriteLine(r);
- };
- Fiddler.FiddlerApplication.AfterSessionComplete += delegate(Fiddler.Session oS)
- {
- //Console.WriteLine("Finished session:\t" + oS.fullUrl);
- Console.Title = ("Session list contains: " + oAllSessions.Count.ToString() + " sessions");
- };
作为学习,注释的代码也很重要,大家有必要拿出来运行一下,看看结果。
FiddlerCoreAPI 使用简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- DevExpress v18.1新版亮点——WPF篇(五)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载& ...
- 2018-2019-2 网络对抗技术 20165202 Exp2 后门原理与实践
博客目录 一.基础问题回答 二.实验准备:后门软件 1.Windows获得Linux Shell 2.Linux获得Windows Shell 3.使用nc传输数据 4.使用ncat实现文件传输 三. ...
- mysql-connector-java-3.1.10-bin-g.jar 和 mysql-connector-java-3.1.10-bin.jar两个文件有什么不同呀?
MySQL Connector/J的文档里说: MySQL Connector/J is distributed as a .zip or .tar.gz archive containing the ...
- IOS UIImage两种初始化的区别
UIImage可以通过以下两种方式进行初始化: 1 //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] 2 3 UIImage *imag ...
- PyTorch 数据集类 和 数据加载类 的一些尝试
最近在学习PyTorch, 但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...
- PR
3.1音频轨道与播放 单声道音轨: 立体声音轨:立体声音频文件 3.2 音频过渡 需要先把第一段视频的结尾与第二段视频的开头切除,然后在使用恒定功率. 3.3 调音台的简单使用 调节音频: 显示声音 ...
- Try .NET
微软新出的好东西——Try .NET,该平台可以让开发者直接在线上编写并运行 .NET 代码. 没啥好说的进去就完事了 平台链接:https://try.dot.net/?fromGist=df448 ...
- 进程间通信--POSIX共享内存
1.参考:https://www.cnblogs.com/Anker/archive/2013/01/19/2867696.html
- 使用OPRT库来实现局域网视频实时传输
转载,侵删 4.代码设计 目的:使用OPRT库来实现局域网视频实时传输 参考samle_venc.c进行ortp开发 4.1.程序流程如下 step1:定义变量,VPSS,VENC,零散变量 step ...
- POJ1734无向图求最小环
题目:http://poj.org/problem?id=1734 方法有点像floyd.若与k直接相连的 i 和 j 在不经过k的情况下已经连通,则有环. 注意区分直接连接和间接连接. * 路径记录 ...