pv_http is a Go-based Layer 7 HTTP load and resilience testing tool intended for authorized testing of web infrastructure. It automatically detects supported HTTP versions (HTTP/1.1, HTTP/2 and HTTP/3) or allows them to be forced manually, distributing workers across protocols to simulate diverse client traffic.
-
Automatic HTTP/1.1, HTTP/2 and HTTP/3 detection
-
Optional protocol selection with
--http-protocol -
Native HTTP/3 (QUIC) support
-
HTTP/2 MadeYouReset-style stream reset workload
-
uTLS browser impersonation with rotating JA3/TLS fingerprints
-
Periodic client recycling to rotate fingerprints
-
Randomized:
- User-Agent
- Accept / Accept-Language
- Referer
- Cookies
- Header names (mixed case)
- Header order
- X-Forwarded-For / X-Real-IP
- SNI
- Request payloads (JSON, form, plain)
- Cache-bypass query parameters
-
Burst & Think traffic simulation
-
Adaptive request delay reacting to selected HTTP responses and network errors
-
Live dashboard with:
- Requests/sec
- Average latency
- Active HTTP versions
- Status codes grouped by protocol
- Error counters
- Adaptive delay
- MadeYouReset statistics
- Live event log
- Go 1.18+
go mod init pv_http
go mod tidygo build pv_http.go./pv_http --url https://example.com [OPTIONS]| Flag | Default | Description |
|---|---|---|
--url |
required | Target URL |
--port |
auto | Override target port |
--duration |
5 |
Duration (minutes) |
--concurrency |
100 |
Worker count |
--http-method |
GET,POST |
Comma-separated HTTP methods |
--http-protocol |
auto | Force 1.1, 2, 3, or combinations |
--random-path |
false |
Preserve the original path while adding randomized cache-bypass query parameters |
--burst |
true |
Enable burst mode |
--burst-size |
15 |
Maximum requests per burst |
--think-time |
7000 |
Maximum think time (ms) |
--jitter |
50 |
Additional random delay (ms) |
--adaptive-delay |
false |
Dynamically adjust pacing |
- Detects supported HTTP versions unless overridden.
- Creates workers distributed across active protocols.
- Uses uTLS to impersonate modern browsers.
- Rotates JA3 fingerprints by rebuilding clients periodically.
- Randomizes headers, cookies, SNI and payloads.
- HTTP/2 workers also perform MadeYouReset stream-reset activity.
- Adaptive delay reacts to rate limiting, blocking responses, timeouts and connection resets.
- Dashboard updates in real time.
Basic:
./pv_http --url https://example.comHTTP/2 only:
./pv_http --url https://example.com --http-protocol 2HTTP/2 + HTTP/3:
./pv_http --url https://example.com --http-protocol 2,3POST workload:
./pv_http --url https://example.com/login --http-method POSTAdaptive delay:
./pv_http --url https://example.com --adaptive-delay=trueRandom cache-bypass parameters:
./pv_http --url https://example.com --random-path=trueThe terminal dashboard displays:
- Time remaining
- Requests sent
- Responses received
- Requests/sec
- Average latency
- Current adaptive delay
- Active HTTP versions
- Per-protocol response status counters
- Error statistics
- MadeYouReset counters
- Recent log messages
- Cache-bypass randomization modifies query parameters while preserving the original path.
- HTTP/3 uses QUIC when supported.
- Client fingerprints rotate throughout long-running executions.
This software is intended only for authorized load testing, resilience testing, and security assessments of systems you own or have explicit permission to test. Unauthorized use against third-party systems may be illegal and unethical.

