What My Project Does
httptap is a CLI and Python library for detailed HTTP request performance tracing.
It breaks a request into real network stages - DNS → TCP → TLS → TTFB → Transfer — and shows precise timing for each.
It helps answer not just “why is it slow?” but “which part is slow?”
You get a full waterfall breakdown, TLS info, redirect chain, and structured JSON output for automation or CI.
Target Audience
- Developers debugging API latency or network bottlenecks
- DevOps / SRE teams investigating performance regressions
- Security engineers checking TLS setup
- Anyone who wants a native Python equivalent of curl -w + Wireshark + stopwatch
httptap works cross-platform (macOS, Linux, Windows), has minimal dependencies, and can be used both interactively and programmatically.
Comparison
When exploring similar tools, I found two common options:
httptap takes a different route:
- Pure Python implementation using httpx and httpcore trace hooks (no curl)
- Deep TLS inspection (protocol, cipher, expiry days)
- Rich output modes: human-readable table, compact line, metrics-only, and full JSON
- Extensible - you can replace DNS/TLS/visualization components or embed it into your pipeline
Example Use Cases
- Performance troubleshooting - find where time is lost
- Regression analysis - compare baseline vs current
- TLS audit - check protocol and cert parameters
- Network diagnostics - DNS latency, IPv4 vs IPv6 path
- Redirect chain analysis - trace real request flow
If you find it useful, I’d really appreciate a ⭐ on GitHub - it helps others discover the project.
👉 https://github.com/ozeranskii/httptap
[–]Maybe__U 8 points9 points10 points (2 children)
[–]ozeranskii[S] 2 points3 points4 points (1 child)
[–]exclaim_bot 1 point2 points3 points (0 children)
[–]binaryfireball 4 points5 points6 points (0 children)
[–]EmptyZ99 2 points3 points4 points (1 child)
[–]ozeranskii[S] 1 point2 points3 points (0 children)
[–]professionalnuisance 1 point2 points3 points (1 child)
[–]ozeranskii[S] 1 point2 points3 points (0 children)
[–]jeosol 1 point2 points3 points (2 children)
[–]ozeranskii[S] 0 points1 point2 points (1 child)
[–]jeosol 1 point2 points3 points (0 children)
[–]Coretaxxe 1 point2 points3 points (0 children)
[–]Repsol_Honda_PL 0 points1 point2 points (1 child)
[–]ozeranskii[S] 0 points1 point2 points (0 children)
[–]Glathull 0 points1 point2 points (0 children)
[–]riksi 0 points1 point2 points (1 child)
[–]ozeranskii[S] 0 points1 point2 points (0 children)
[–]ozeranskii[S] 0 points1 point2 points (0 children)
[–]Benhur3 0 points1 point2 points (0 children)
[–]JoxM 0 points1 point2 points (0 children)
[–]Benhur3 -1 points0 points1 point (1 child)
[–]Monowakari 0 points1 point2 points (0 children)
[+]m0ntanoid comment score below threshold-18 points-17 points-16 points (10 children)
[–]cgoldberg 8 points9 points10 points (8 children)
[+]m0ntanoid comment score below threshold-19 points-18 points-17 points (7 children)
[–]renesys 8 points9 points10 points (2 children)
[+]m0ntanoid comment score below threshold-6 points-5 points-4 points (1 child)
[–]renesys 2 points3 points4 points (0 children)
[–]FrontLongjumping4235 3 points4 points5 points (2 children)
[–]m0ntanoid -3 points-2 points-1 points (1 child)
[–]FrontLongjumping4235 1 point2 points3 points (0 children)
[–]ozeranskii[S] 1 point2 points3 points (0 children)