使用 FiddlerCore 自定義 HTTP/HTTPS 網絡代理


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM