reqx
reqx is an HTTP transport client for Rust API SDK libraries.
It focuses on SDK transport concerns: retries, timeout phases, idempotency, proxy routing, structured errors, and metrics.
Install
Use native-tls:
Use rustls + aws-lc-rs:
Use blocking client with ureq + rustls(ring):
Use blocking client with ureq + native-tls:
TLS Backends
- async backends (default mode):
async-tls-rustls-ring(default)async-tls-rustls-aws-lc-rsasync-tls-native
- blocking backends (
ureq):blocking-tls-rustls-ringblocking-tls-rustls-aws-lc-rsblocking-tls-native
- runtime selection via
tls_backend(TlsBackend::...) - build-time mismatch returns structured error from
try_build() - trust store selection via
tls_root_store(TlsRootStore::BackendDefault | WebPki | System | Specific) - custom root CA:
tls_root_store(TlsRootStore::Specific)+tls_root_ca_pem(...)/tls_root_ca_der(...) - mTLS identity:
- PEM chain + key:
tls_client_identity_pem(...)(async + sync) - PKCS#12:
tls_client_identity_pkcs12(...)(asyncasync-tls-native)
- PEM chain + key:
Quick Start
use Duration;
use ;
use Deserialize;
async
Blocking Quick Start
use Duration;
use HttpClient;
Core Capabilities
- global defaults + per-request overrides
- idempotency-aware retries
- retry budget + circuit breaker + adaptive concurrency controls
- global/per-host rate limiting with
429 Retry-Afterbackpressure - bounded redirect following (
RedirectPolicy) - transport timeout + response-body timeout + total deadline
- separate connect timeout (
connect_timeout(...)) - streaming upload and streaming response path
- buffered-path automatic decoding:
gzip,br,deflate,zstd - proxy support with auth and
no_proxy - interceptor hooks for SDK concerns (
HttpInterceptor) - response body size limit
- structured error variants + machine error codes
- metrics snapshot for retries, latency, status and error buckets
Examples
- Full index:
examples/README.md cargo run --example basic_jsoncargo run --example request_helperscargo run --example request_overridescargo run --example error_handlingcargo run --example metrics_snapshotcargo run --example streamingcargo run --example concurrency_limitscargo run --example resilience_controlscargo run --example rate_limit_429cargo run --example retry_classifiercargo run --example proxy_and_no_proxycargo run --example tls_backendscargo run --example custom_ca_mtlscargo run --example interceptor_redirectcargo run --example blocking_basic --no-default-features -F blocking-tls-rustls-ring
Error Model
Common HttpClientError variants:
Transport { kind, .. }Timeout { phase, .. }DeadlineExceeded { .. }HttpStatus { status, body, .. }DecodeContentEncoding { .. }Deserialize { .. }
Use error.code() for stable machine-readable classification.