Knapcode.SAZ 0.2.0

Prefix Reserved
dotnet add package Knapcode.SAZ --version 0.2.0
                    
NuGet\Install-Package Knapcode.SAZ -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Knapcode.SAZ" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Knapcode.SAZ" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Knapcode.SAZ" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Knapcode.SAZ --version 0.2.0
                    
#r "nuget: Knapcode.SAZ, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Knapcode.SAZ@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Knapcode.SAZ&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Knapcode.SAZ&version=0.2.0
                    
Install as a Cake Tool

Knapcode.SAZ

Parse and enumerate the Session Archive Zip (SAZ) file format produced by Fiddler. Uses reflection over internal .NET HTTP types. Future .NET versions may require updates.

Install

dotnet add package Knapcode.SAZ

Example

using Knapcode.SAZ;

string path = "../../test/SAZ.Test/TestData/httpbin-test.saz";
CancellationToken token = CancellationToken.None;
using FileStream zipStream = File.OpenRead(path);
using SessionArchiveZip saz = SessionArchiveZip.Create(zipStream);

foreach (Session session in saz.Sessions.Take(3))
{
    // read the request as an HTTP request message
    using var request = await session.ReadRequestAsync(decompress: true, token);
    Console.WriteLine($"Request: {request.Method} {request.RequestUri}");

    // read the response as an HTTP response message
    using var response = await session.ReadResponseAsync(decompress: true, token);
    var responseBody = await response.Content.ReadAsStringAsync(token);
    Console.WriteLine($"Response: {(int)response.StatusCode} {response.ReasonPhrase}");
    Console.WriteLine($"Body string length: {responseBody.Length}");

    // read metadata about the request like timings
    var metadata = await session.ReadMetadataAsync(token);
    Console.WriteLine($"Started: {metadata.SessionTimers?.ClientBeginRequest:O}");
    Console.WriteLine();
}

The output will look something like this:

Request: GET https://httpbin.org/get
Response: 200 OK
Body string length: 789
Started: 2025-08-30T11:33:40.0256586-07:00

Request: GET https://httpbin.org/stream/5
Response: 200 OK
Body string length: 3610
Started: 2025-08-30T11:34:28.6859373-07:00

Request: GET https://httpbin.org/brotli
Response: 200 OK
Body string length: 776
Started: 2025-08-30T11:34:46.7421843-07:00

Disclaimers

This project is independent and has no affiliation with Telerik or Progress Software Corporation (makers of Fiddler).

Fiddler is a trademark of Progress Software Corporation. All product names, trademarks and registered trademarks are property of their respective owners.

WebSocket and gRPC sessions (_w.txt, _g.txt) are currently not supported.

The library uses reflection on internal .NET runtime types (e.g. HttpConnection) to parse HTTP messages efficiently without re‑implementing the HTTP protocol. These internal APIs are unsupported and can change between .NET releases. Forward compatibility is not guaranteed. If a future .NET version changes required internal members, the library should throw an exception (perhaps not very descriptive) instead of failing silently. Please pin a known working .NET runtime version in production, and run your test suite before upgrading.

Input validation is minimal: if you process untrusted SAZ files you may wish to impose additional limits (entry count, total uncompressed size) before calling SessionArchiveZip.Create.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 111 9/1/2025
0.1.0 112 8/31/2025