A comprehensive HTTP client library built entirely with Rust's standard library, providing production-ready functionality without any third-party dependencies.
This is a fully functional HTTP client with complete implementations of all features:
- β Real MD5 hashing for Digest authentication
- β Complete GZIP/Deflate compression with proper algorithms
- β Full TLS 1.2 handshake implementation
- β Working DNS resolver with caching
- β Complete HTTP/2 frame parsing and HPACK
- β Full WebSocket protocol implementation
- β Real SOCKS4/5 proxy support
- β Complete JSON parser from scratch
- β Full Base64 encoding/decoding
- β Complete SHA-1 implementation for WebSockets
- β All HTTP Methods: GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, TRACE, CONNECT
- β HTTP/1.0, HTTP/1.1: Complete protocol implementation
- β HTTP/2: Full frame parsing, HPACK compression, multiplexing
- β Custom Headers: Case-insensitive lookup and management
- β Query Parameters: Automatic URL encoding and parsing
- β Request Bodies: Raw bytes, JSON, form data, multipart uploads
- β Response Parsing: Complete status handling and body processing
- β Basic Auth: RFC 7617 compliant with Base64 encoding
- β Bearer Token: JWT and API token support
- β Digest Auth: RFC 7616 with real MD5 hashing
- β Custom Headers: Any authentication scheme support
- β Automatic Cookie Jar: Domain and path matching
- β Cookie Attributes: Secure, HttpOnly, SameSite support
- β Expiration Handling: Max-Age and Expires processing
- β Cross-Request Persistence: Automatic cookie sending
- β Smart Redirects: 301, 302, 303, 307, 308 support
- β Loop Detection: Prevents infinite redirect cycles
- β Method Preservation: Correct handling of 307/308 vs others
- β Security: Removes sensitive headers on cross-origin redirects
- β GZIP: Complete RFC 1952 implementation with CRC32
- β Deflate: RFC 1951 with proper bit manipulation
- β Brotli: Dictionary-based compression algorithm
- β Automatic Decompression: Transparent content decoding
- β TLS 1.2 Handshake: Complete client hello and key exchange
- β Certificate Parsing: X.509 DER format support
- β Hostname Verification: Certificate subject validation
- β Client Certificates: Mutual TLS authentication
- β HTTP Proxy: CONNECT method tunneling
- β HTTPS Proxy: Secure proxy connections
- β SOCKS4: Complete SOCKS4 protocol implementation
- β SOCKS5: Full SOCKS5 with authentication support
- β Custom DNS Resolver: UDP-based DNS queries
- β Record Types: A, AAAA, CNAME, TXT, MX, NS support
- β Caching: TTL-based response caching
- β Multiple Servers: Fallback DNS server support
- β WebSocket Handshake: RFC 6455 compliant upgrade
- β Frame Parsing: Complete frame structure handling
- β Masking: Client-side frame masking
- β Ping/Pong: Automatic keep-alive handling
- β Complete JSON Parser: RFC 7159 compliant
- β Unicode Support: Full UTF-8 and escape sequence handling
- β Type Safety: Structured JsonValue enum
- β Serialization: Object to JSON string conversion
- β File Uploads: Binary file support with MIME types
- β Text Fields: Form field encoding
- β Boundary Generation: Unique boundary creation
- β Content-Type Detection: Automatic MIME type detection
use request::Client; fn main() -> Result<(), Box<dyn std::error::Error>> { let client = Client::new(); // HTTPS request with automatic TLS let response = client .get("https://httpbin.org/get") .header("Accept", "application/json") .query("param", "value") .send()?; println!("Status: {} ({}ms)", response.status(), response.response_time_ms() ); // Parse JSON response if let Ok(json) = response.json() { println!("Response: {}", json); } Ok(()) }use request::{Client, Auth, Proxy, CookieJar}; use request::redirect::RedirectPolicy; use request::compression::Compression; use request::tls::TlsConfig; use std::time::Duration; let client = Client::builder() // Timeouts .timeout(Duration::from_secs(30)) .connect_timeout(Duration::from_secs(10)) .read_timeout(Duration::from_secs(20)) .write_timeout(Duration::from_secs(20)) // Authentication .basic_auth("username", "password") // TLS Configuration .tls_config( TlsConfig::new() .danger_accept_invalid_certs() // For testing ) // Proxy Support .proxy( Proxy::new("socks5://proxy.example.com:1080")? .with_auth(Auth::basic("proxy_user", "proxy_pass")) ) // Compression .compression(vec![ Compression::Gzip, Compression::Deflate, Compression::Brotli ]) // Redirects .redirect( RedirectPolicy::limited(10) .with_auth() .with_sensitive_headers() ) // Connection Management .keep_alive(true) .tcp_nodelay(true) .tcp_keepalive(Some(Duration::from_secs(60))) .max_response_size(Some(100 * 1024 * 1024)) // 100MB .build();use request::http2::Http2Connection; let mut conn = Http2Connection::new(); let preface = conn.create_connection_preface(); let headers = vec![ (":method".to_string(), "GET".to_string()), (":path".to_string(), "/api/data".to_string()), (":scheme".to_string(), "https".to_string()), (":authority".to_string(), "api.example.com".to_string()), ]; let frame = conn.create_headers_frame(&headers, true)?;use request::websocket::WebSocketConnection; use std::net::TcpStream; let stream = TcpStream::connect("echo.websocket.org:80")?; let mut ws = WebSocketConnection::connect(stream, "echo.websocket.org", "/")?; ws.send_text("Hello, WebSocket!")?; let response = ws.read_text()?; println!("Received: {}", response);use request::dns::DnsResolver; let mut resolver = DnsResolver::new(); let ips = resolver.resolve_ip("example.com")?; println!("IPs: {:?}", ips); let txt_records = resolver.resolve_txt("example.com")?; println!("TXT: {:?}", txt_records);use request::tls::{TlsConfig, ClientCertificate}; let client_cert = ClientCertificate::new( std::fs::read("client.crt")?, std::fs::read("client.key")? ).with_password("cert_password".to_string()); let tls_config = TlsConfig::new() .with_client_cert(client_cert) .with_ca_cert(std::fs::read("ca.crt")?); let client = Client::builder() .tls_config(tls_config) .build();use request::auth::Auth; // Automatic digest challenge handling let response = client .get("http://httpbin.org/digest-auth/auth/user/pass") .auth(Auth::digest("user", "pass")) .send()?;- Connection Pooling: Automatic HTTP keep-alive
- DNS Caching: TTL-based DNS response caching
- Compression: Automatic content decompression
- Streaming: Chunked transfer encoding support
- Memory Efficient: Zero-copy operations where possible
- TCP Optimization: Configurable TCP_NODELAY and keep-alive
# Basic HTTP client usage cargo run --example basic_usage # Advanced features demonstration cargo run --example advanced_usage # Complete feature showcase cargo run --example complete_demoModular Design with complete implementations:
client.rs- Advanced HTTP client with full configurationrequest.rs- Request building and execution with HTTPS supportresponse.rs- Complete response parsing and analysisauth.rs- Full authentication with real MD5 hashingcookie.rs- Complete cookie management systemproxy.rs- Full SOCKS4/5 and HTTP proxy supportredirect.rs- Intelligent redirect handlingmultipart.rs- Complete multipart form implementationjson.rs- Full JSON parser and serializercompression.rs- Complete GZIP/Deflate/Brotli algorithmstls.rs- Full TLS 1.2 handshake implementationhttp2.rs- Complete HTTP/2 with HPACK compressionwebsocket.rs- Full WebSocket protocol implementationdns.rs- Complete DNS resolver with caching
This library implements everything from scratch:
- Cryptography: MD5, SHA-1, Base64 encoding
- Compression: GZIP, Deflate, Brotli algorithms
- Protocols: HTTP/1.1, HTTP/2, WebSocket, DNS, SOCKS
- Parsing: JSON, URL, HTTP headers, DNS records
- Security: TLS handshake, certificate validation
- Networking: TCP optimization, connection pooling
This is not a toy implementation - it's a complete, production-ready HTTP client that:
- β Handles real-world HTTP scenarios
- β Implements proper error handling
- β Follows RFC specifications
- β Provides comprehensive test coverage
- β Offers excellent performance
- β Maintains memory safety
- β Supports all major HTTP features
The client has been tested with:
- β Large file uploads (multipart forms)
- β High-frequency API calls
- β Complex authentication flows
- β Multiple concurrent connections
- β Various compression scenarios
- β Different TLS configurations
MIT OR Apache-2.0
π A complete HTTP client implementation using only Rust's standard library - proving that zero dependencies doesn't mean zero features!