hurley

Crates.iohurley
lib.rshurley
version0.1.2
created_at2026-01-10 14:38:19.383606+00
updated_at2026-01-12 09:41:32.685105+00
descriptionA curl-like HTTP client with performance testing capabilities
homepagehttps://github.com/dursunkoc/hurley
repositoryhttps://github.com/dursunkoc/hurley
max_upload_size
id2034271
size2,644,379
Dursun Koc (dursunkoc)

documentation

https://docs.rs/hurley

README

Hurley Logo

hurley

A curl-like HTTP client with performance testing capabilities, written in Rust.

Crates.io version Download docs.rs docs License

API Docs | Releases

Features

  • HTTP Methods: GET, POST, PUT, DELETE, PATCH, HEAD
  • Custom Headers: -H "Content-Type: application/json"
  • Request Body: Inline (-d) or from file (-f)
  • Follow Redirects: -L
  • Verbose Output: -v
  • Performance Testing: Concurrent requests with latency metrics

Installation

cargo install hurley

Or build from source:

git clone https://github.com/dursunkoc/hurley.git
cd hurley
cargo build --release

Usage

Basic HTTP Requests

# Simple GET request
hurley https://httpbin.org/get

# POST with JSON body
hurley -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"name": "test", "value": 123}'

# Include response headers
hurley -i https://httpbin.org/get

# Verbose output
hurley -v https://httpbin.org/get

# Follow redirects
hurley -L https://httpbin.org/redirect/3

Performance Testing

# 100 requests with 10 concurrent connections
hurley https://httpbin.org/get -c 10 -n 100

# Performance test with dataset
hurley https://httpbin.org --perf requests.json -c 20 -n 500

# JSON output for programmatic use
hurley https://httpbin.org/get -c 5 -n 50 --output json

Dataset Format

Create a JSON file with request definitions:

[
  {"method": "GET", "path": "/users"},
  {"method": "POST", "path": "/users", "body": {"name": "test"}},
  {"method": "GET", "path": "/users/1", "headers": {"Authorization": "Bearer token"}}
]

Performance Metrics

The performance test output includes:

  • Request Summary: Total, successful, failed requests
  • Timing: Total duration, requests/second
  • Latency Distribution: Min, max, avg, p50, p95, p99
  • Endpoint Breakdown: Detailed metrics for each unique endpoint (when using datasets)
═══════════════════════════════════════════════════════════
                    PERFORMANCE RESULTS
═══════════════════════════════════════════════════════════

📊 Request Summary
   Total Requests:      100
   Successful:          98
   Failed:              2
   Error Rate:          2.00%

⏱️  Timing
   Total Duration:      5234.12 ms
   Requests/sec:        19.11

📈 Latency Distribution
   Min:                 45.23 ms
   Max:                 312.45 ms
   Avg:                 89.67 ms
   p50 (Median):        78.34 ms
   p95:                 198.23 ms
   p99:                 287.12 ms

═══════════════════════════════════════════════════════════
                    ENDPOINT BREAKDOWN
═══════════════════════════════════════════════════════════

📍 GET /users
───────────────────────────────────────────────────────────
📊 Request Summary
   Total Requests:      60
   Successful:          60
   Failed:              0
   Error Rate:          0.00%

⏱️  Timing
   Total Duration:      3120.45 ms
   Requests/sec:        19.23

📈 Latency Distribution
   Min:                 45.23 ms
   Max:                 150.12 ms
   Avg:                 75.34 ms
   p50 (Median):        72.10 ms
   p95:                 120.45 ms
   p99:                 140.23 ms

📍 POST /users
───────────────────────────────────────────────────────────
📊 Request Summary
   Total Requests:      40
   Successful:          38
   Failed:              2
   Error Rate:          5.00%

⏱️  Timing
   Total Duration:      2113.67 ms
   Requests/sec:        18.92

📈 Latency Distribution
   Min:                 80.12 ms
   Max:                 312.45 ms
   Avg:                 110.23 ms
   p50 (Median):        95.67 ms
   p95:                 250.34 ms
   p99:                 287.12 ms

═══════════════════════════════════════════════════════════

License

MIT License - see LICENSE for details.

Author

Dursun Koc - @dursunkoc

Commit count: 7

cargo fmt