Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能。

Fiddler 插件开发,使用 WPF 作为 UI 控件 - J.晒太阳的猫 - 博客园

但部分场景下,需要自定义很多网络监控操作,集成到自己的程序中。这时就需要 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

参考资料

原文链接:https://www.cnblogs.com/jasongrass/p/12044321.html

使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理的更多相关文章

  1. 云原生网络代理(MOSN)的进化之路

    本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...

  2. Proxy SwitchySharp chrome网络代理【转】

    Proxy SwitchySharp chrome网络代理插件概述 SwitchySharp 是 Google Chrome 浏览器上的一个代理管理扩展程序,是一款可以自己设置谷歌浏览器使用方式的ch ...

  3. Docker网络代理设置

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可 ...

  4. Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务

    目录 目录 1.GitLab11.3.9的安装 2.域名在阿里云托管,申请免费的1年证书 3.Gitlab 的 https 配置 4.Nginx 配置 https,反向代理指向 Gitlab 配置 目 ...

  5. centos 桥接配置 设置网络代理 lnmp搭建

    一.桥接配置 centos设置  编辑->虚拟网络编辑器->桥接模式->还原默认设置 虚拟机->设置->网络适配器->桥接 cd /etc/sysconfig/ne ...

  6. 手头没证书,如何给https做代理?Nginx TCP转发

    线上的一个海外充值接口(https)经常因我朝网络问题中断,想借助hk的机器做个https反向代理又没证书. 一开始 一开始想到的办法是借助Nginx的tcp转发进行代理: 编译NGINX时加入 -- ...

  7. 工作随笔——Java网络代理(http,socks)

    简单说一下Java如何便捷的使用网络代理功能 此方法使用于大部分情况,一些特殊框架(如:mina)无效. // 代码设置http代理 System.setProperty("proxySet ...

  8. 用squid做http/https正向代理

    0.环境准备 VM1(server):nat-192.168.12.128 bridge-192.168.124.128 VM2(client):bridge-192.168.124.129 在VMw ...

  9. Qt之QNetworkProxy(网络代理)

    简述 QNetworkProxy类提供了一个网络层代理. QNetworkProxy提供了配置网络层代理支持Qt网络类的方法.目前支持的类有QAbstractSocket.QTcpSocket.QUd ...

随机推荐

  1. Python 从入门到进阶之路(五)

    之前的文章我们简单介绍了一下 Python 的函数,本篇文章我们来看一下 Python 中的面向对象. Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是 ...

  2. Java面试必备:手写单例模式

    面试官:请手写下几种常见的单例模式 我:好的(面带微笑),心里暗喜(送分题). 没成想提笔便写出了如此豪放的代码,不堪回首,请原谅我的不羁! 此篇整理了几种常见的单例模式代码示例,再有面试官让手撕单例 ...

  3. MySQL插入数据时报错Cause: java.sql.SQLException: #HY000的解决方法

    数据库中有字段要求不能为空,但是insert插入的时候,改字段没有值

  4. java 与 iOS 平台概念比较

    java oc/swift jvm iphone jre runtime? jdk ios SDK spring xcode 生成的应用模版 服务器(tomcat) 系统的事件调度派发部分 class ...

  5. 【HNOI 2017】礼物

    Problem Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个装饰物,并且每个装饰物 ...

  6. python django-admin.py startproject xxx 错误:from django.core import management

    1. Python安装路径以及Python安装路径\Script文件夹,已经添加到PATH环境变量中. 2. 查看django 版本正常: import django print(django.__v ...

  7. ArcGIS api for JavaScript 3.27 在线浏览的一些小部件

    var navOption; var navToolbar;// 当前选择的操作 require( [ "esri/toolbars/navigation", "esri ...

  8. iOS中数组的倒序、升序、降序

    NSMutableArray *array = [NSMutableArray arrayWithObjects:",nil]; // 倒序 NSMutableArray *resultAr ...

  9. Android Studio 3.0 及以上版本使用技巧总结

    1.更新Android Studio后下载Gradle文件的技巧 更新到3.0版本后,可能会出现创建新项目一直停留在如下图的界面: 选择等待?不知道要等到什么时候,这时候怎么办呢?显然,不能一直等待下 ...

  10. python3字符串常用方法

    整型和布尔值的转换: bin -- 十进制转二进制 int("1101",2) -- 二进制转十进制 十进制转二进制的算法 除2 取余,获取的所有余数从下往上进行计算 二进制转十进 ...