.NET 开发者的“Fiddler”:Titanium.Web.Proxy 库的强大魅力
在日常开发中,我们经常需要监控和分析网络请求。虽然 Fiddler 和 Charles 等工具功能强大,但有时我们需要将抓包功能集成到自己的应用中。Titanium.Web.Proxy 就是一个强大的 .NET 库,它允许我们在自己的应用中实现完整的 HTTP/HTTPS 抓包功能。
本文将基于一个实际的 Windows Forms .net 8.0项目,展示如何使用 Titanium.Web.Proxy 构建一个功能完善的网络监控工具。
一、安装NuGet 包
Install-Package Titanium.Web.Proxy
二、代理服务器初始化
private void InitializeProxy()
{proxyServer = new ProxyServer();proxyServer.CertificateManager.CreateRootCertificate();proxyServer.CertificateManager.TrustRootCertificateAsAdmin();
}
证书管理是 HTTPS 抓包的关键,Titanium.Web.Proxy 会自动处理证书的创建和信任,使我们可以解密 HTTPS 流量。证书安装一次后不会重复提示安装。(之前在用FiddlerCore的时候,每次启动应用都需要安装一次证书,所以找替代库,就找到了Titanium.Web.Proxy)
三、启动代理服务器
private async Task StartCapture()
{try{// 验证端口号if (!int.TryParse(txtPort.Text, out int port) || port < 1 || port > 65535){MessageBox.Show("请输入有效的端口号 (1-65535)");return;}// 创建代理端点var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, port, true);if (proxyServer != null){// 注册请求处理事件proxyServer.BeforeRequest += OnRequest;proxyServer.BeforeResponse += OnResponse;// 启动代理proxyServer.AddEndPoint(explicitEndPoint);proxyServer.Start();// 设置系统代理proxyServer.SetAsSystemHttpProxy(explicitEndPoint);proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);isCapturing = true;LogManager.Log($"代理已启动,监听端口: {port}\r\n");}}catch (Exception ex){MessageBox.Show($"启动代理失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}
}
四、逻辑处理
OnRequest这是抓包的核心功能,所有经过代理的请求都会触发这个事件。
private async Task OnRequest(object sender, SessionEventArgs e)
{//这里我们经常需要过滤特定类型的请求//DataManager.HandleData(e.HttpClient.Request.Url);
}private async Task OnRequest(object sender, SessionEventArgs e)
{// 这里可以修改请求和响应// 修改请求头e.HttpClient.Request.Headers.Add("X-Custom-Header", "Value");// 修改请求体if (e.HttpClient.Request.Method == "POST"){var body = await e.GetRequestBody();var modifiedBody = body.Replace("old", "new");await e.SetRequestBody(modifiedBody);}
}