使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理
Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能。
但部分场景下,需要自定义很多网络监控操作,集成到自己的程序中。这时就需要 FiddlerCore 了。
关于 Fiddler的使用,Fiddler插件开发,FiddlerCore 详细的说明,都可以看 《Fiddler权威调试指南》一书,网上可以找到电子版。
FiddlerCore 安装
FiddlerCore 的最新版本是收费版,但 nuget.org 上可以下载到之前版本(最后更新时间:2016-01-01),基础的功能是够用的,不能直接拉取的话,则需要配置本地 Nuget 源,然后把这个 Nuget 包放进去。
并在项目 csproj 文件中,添加:
<ItemGroup>
<PackageReference Include="FiddlerCore" Version="4.6.2.0"/>
</ItemGroup>
FiddlerCore 官网:FiddlerCore - Fiddler Proxy Engine for .NET and .NET Standard - Telerik
FiddlerCore Nuget: NuGet Gallery | FiddlerCore 4.6.2
FiddlerCore Nuget 包(4.6.2) 下载地址:https://pan.baidu.com/s/1ueTCsJ5Jv7wovCeWVN4gDw

FiddlerCore 使用
FiddlerCore 的使用非常简单,主要的就是 1 启动代理,2 监听事件,3 安装证书,4 关闭代理
- 1 启动代理
FiddlerApplication.Startup(9898, FiddlerCoreStartupFlags.Default | FiddlerCoreStartupFlags.RegisterAsSystemProxy);
这里 FiddlerCoreStartupFlags.RegisterAsSystemProxy 是将你的这个程序(或者说 127.0.0.1:9898)注册为系统代理,所有走系统代理的,都会通过此程序。
如果不设置 FiddlerCoreStartupFlags.RegisterAsSystemProxy ,则被监控的程序,需要手动指定代理到 9898 这个端口。
- 2 监听事件
FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse;
private static void FiddlerApplication_BeforeResponse(Session oSession)
{
}
private static void FiddlerApplication_BeforeRequest(Session oSession)
{
}
通过这两个事件,就可以拿到 FiddlerCore 所截获的请求。然后进行操作或者记录。

- 3 安装证书
如果需要监听 HTTPS 请求,需要安装证书,安装证书时,会有一个弹窗,让用户同意。
// 安装证书
public static bool InstallCertificate()
{
if (!CertMaker.rootCertExists())
{
if (!CertMaker.createRootCert())
return false;
if (!CertMaker.trustRootCert())
return false;
}
return true;
}
// 卸载证书
public static bool UninstallCertificate()
{
if (CertMaker.rootCertExists())
{
if (!CertMaker.removeFiddlerGeneratedCerts(true))
return false;
}
return true;
}

- 4 关闭代理
这点很重要,因为如果程序结束之后代理不关闭,则无法正常上网。(因为设置了代理,但代理程序关闭了。)
if (FiddlerApplication.IsStarted())
{
FiddlerApplication.Shutdown();
}
在真正使用的时候,以上这些操作,建议做一层抽象和封装,不然业务和网络监控的代码会耦合的太紧。
更多关于网络测试与监控的实现,可以参考这个项目:
RickStrahl/WestWindWebSurge: Quick and easy URL and Load Testing for your Web applications on Windows
参考资料
- 使用FiddlerCore来测试WebAPI - 独上高楼 - 博客园
- Using FiddlerCore to capture HTTP Requests with .NET - Rick Strahl's Web Log
- Fiddler调试权威指南
原文链接:https://www.cnblogs.com/jasongrass/p/12044321.html
使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理的更多相关文章
- 云原生网络代理(MOSN)的进化之路
本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...
- Proxy SwitchySharp chrome网络代理【转】
Proxy SwitchySharp chrome网络代理插件概述 SwitchySharp 是 Google Chrome 浏览器上的一个代理管理扩展程序,是一款可以自己设置谷歌浏览器使用方式的ch ...
- Docker网络代理设置
背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可 ...
- Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务
目录 目录 1.GitLab11.3.9的安装 2.域名在阿里云托管,申请免费的1年证书 3.Gitlab 的 https 配置 4.Nginx 配置 https,反向代理指向 Gitlab 配置 目 ...
- centos 桥接配置 设置网络代理 lnmp搭建
一.桥接配置 centos设置 编辑->虚拟网络编辑器->桥接模式->还原默认设置 虚拟机->设置->网络适配器->桥接 cd /etc/sysconfig/ne ...
- 手头没证书,如何给https做代理?Nginx TCP转发
线上的一个海外充值接口(https)经常因我朝网络问题中断,想借助hk的机器做个https反向代理又没证书. 一开始 一开始想到的办法是借助Nginx的tcp转发进行代理: 编译NGINX时加入 -- ...
- 工作随笔——Java网络代理(http,socks)
简单说一下Java如何便捷的使用网络代理功能 此方法使用于大部分情况,一些特殊框架(如:mina)无效. // 代码设置http代理 System.setProperty("proxySet ...
- 用squid做http/https正向代理
0.环境准备 VM1(server):nat-192.168.12.128 bridge-192.168.124.128 VM2(client):bridge-192.168.124.129 在VMw ...
- Qt之QNetworkProxy(网络代理)
简述 QNetworkProxy类提供了一个网络层代理. QNetworkProxy提供了配置网络层代理支持Qt网络类的方法.目前支持的类有QAbstractSocket.QTcpSocket.QUd ...
随机推荐
- 《java编程思想(第四版)》第一二章学习笔记
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...
- PHP 管理树莓派
同学给过我一块树莓派,那会儿觉得挺新鲜的.但是每次使用都需要远程桌面或者 ssh 进行登录,比较麻烦.后来为了方便管理,在树莓派上安装部署了 LAMP 环境,然后写了一个简单的 PHP 页面,代码如下 ...
- 浅谈Kotlin中的函数
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方 ...
- java获取当前年份、月份和日期字符串等
Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...
- Linux系统:centos7下搭建Nginx和FastDFS文件管理中间件
本文源码:GitHub·点这里 || GitEE·点这里 一.FastDFS简介 1.基础概念 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件上传 ...
- [Spring cloud 一步步实现广告系统] 8. 检索系统配置&依赖
工作流程 项目依赖 <dependencies> <!-- hystrix 监控面板 --> <dependency> <groupId>org.spr ...
- .net core 2.1 基于Jwt的登录认证
1.新建一个.net core2.1 基于 api 的工程,引用Microsoft.AspNetCore.Authentication.JwtBearer 包 2.新建一个Token的实体类,一个Jw ...
- for循环使用element的折叠面板遇到的问题-1
首先,效果是点击添加折叠面板,折叠面板的title右侧是关闭的小按钮,每次添加的面板都自动展开,其他的面板自动关闭,但其中发现一个问题是,每次点击关闭的时候,虽然上一个面板被关闭了,但他的下一个会自动 ...
- SAP MCH1表和MCHA表更新逻辑
SAP MCH1表和MCHA表更新逻辑 笔者所在的A项目里,批次是在material level 唯一, 意味着不同物料号可以有相同的批次号,只要物料号+批次号组合是唯一的即可. SE11 看MCH1 ...
- 27-限制容器的 Block IO
Block IO 是另一种可以限制容器使用的资源.Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论. 注:目前 ...