Skip to content

Repository files navigation

Titanium Web Proxy

A lightweight, asynchronous HTTP(S) proxy server for .NET. It acts as a man in the middle (MITM) proxy and/or as a reverse proxy. Designed for high-performance. Works in Windows, Linux & Apple devices.

Build NuGet NuGet downloads License

Code Quality

Quality Gate Coverage Lines of Code Bugs Vulnerabilities Code Smells Security Rating Reliability Rating Maintainability Rating Duplicated Lines Technical Debt

Features

  • Intercept, inspect, modify, redirect, or block HTTP and HTTPS traffic
  • Explicit, transparent, and SOCKS4/5 proxy endpoints
  • Request and response body streaming across HTTP/1.x (plain and TLS), HTTP/2, and HTTP/3 (see the protocol support matrix)
  • HTTP/2 support, on by default, opt-out via ProxyServer.EnableHttp2 (see the protocol support matrix for exact coverage)
  • HTTP/3 (QUIC) support, opt-in via ProxyServer.EnableHttp3 = true (requires MsQuic; 1xx interim responses, per-chunk body streaming hooks, upstream proxy chaining with TCP fallback, HTTPS/SVCB DNS discovery, and QPACK dynamic table; see the HTTP/3 wiki for setup and the protocol bridge matrix for every client→origin direction)
  • Upstream HTTP, HTTPS, and SOCKS proxies with automatic system proxy detection
  • Proxy authentication, mutual TLS, Kerberos, and NTLM support
  • Connection, certificate, and buffer pooling
  • Built-in, zero-overhead-when-disabled logging (every caught exception, optionally to console/file or your own ILoggerFactory) and opt-in structured request/connection timing — see Logging and diagnostics in the wiki

Installation

Install the stable package from NuGet:

dotnet add package Titanium.Web.Proxy

To use the latest prerelease:

dotnet add package Titanium.Web.Proxy --prerelease

Supported frameworks

  • .NET 10

Versions prior to 4.0 also supported .NET Framework 4.6.2 and .NET 8; starting with 4.0, the package targets .NET 10 only so the codebase can take full advantage of modern APIs.

Breaking change: ProxyServer.ExceptionFunc and SessionEventArgsBase.TimeLine were removed in favor of the unified ProxyServer.Logging/EnableRequestTimingCapture APIs described in Logging and diagnostics and Breaking changes: unified logging and timing.

Quick start

The following example starts an explicit HTTP(S) proxy on 127.0.0.1:8000 and logs each requested URL:

using System;
using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Titanium.Web.Proxy;
using Titanium.Web.Proxy.EventArguments;
using Titanium.Web.Proxy.Models;

using var proxyServer = new ProxyServer();

// Built-in console sink is a bounded channel + background writer, so LogInformation
// never blocks a session thread on Console I/O.
proxyServer.Logging.MinimumLevel = LogLevel.Information;

proxyServer.BeforeRequest += OnRequest;

var endPoint = new ExplicitProxyEndPoint(IPAddress.Loopback, 8000, decryptSsl: true);
proxyServer.AddEndPoint(endPoint);

// Create and trust the root certificate used to decrypt HTTPS traffic.
proxyServer.CertificateManager.EnsureRootCertificate(
    userTrustRootCertificate: true,
    machineTrustRootCertificate: false);

proxyServer.Start();
proxyServer.Logger.LogInformation("Proxy listening on 127.0.0.1:8000. Press Enter to stop.");
await Console.In.ReadLineAsync();
proxyServer.Stop();

Task OnRequest(object sender, SessionEventArgs e)
{
    proxyServer.Logger.LogInformation("{Url}", e.HttpClient.Request.Url);
    return Task.CompletedTask;
}

Configure your client to use 127.0.0.1:8000 as its HTTP and HTTPS proxy. Trusting a generated root certificate changes the current user's certificate store; only do this on a machine you control.

Examples and documentation

Screenshots

Basic console example — compact per-request traffic tape:

Basic console proxy screenshot

WPF example — session list with request/response inspection:

WPF proxy application screenshot

Support and contributing

  • Report reproducible bugs and feature requests through GitHub Issues.
  • Ask programming questions on Stack Overflow using the titanium-web-proxy tag.
  • Pull requests are welcome. Please include tests for behavior changes when practical.

Maintainers

This project is actively maintained by:

Past contributors:

License

Titanium Web Proxy is available under the MIT License.

About

A cross-platform asynchronous HTTP(S) proxy server in C#.

Topics

Resources

Stars

2.0k stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages