http-request
A lightweight, efficient library for building, sending, and handling HTTP/HTTPS requests in Rust applications. http-request provides a simple and intuitive API, allowing developers to easily interact with web services, whether they use the "HTTP" or "HTTPS" protocol. The library supports various HTTP methods, custom headers, request bodies, timeout, automatic handling of redirects (including detecting redirect loops), and enhanced response body decoding (both automatic and manual), enabling fast and secure communication. Whether working with secure "HTTPS" connections or standard "HTTP" requests, the library is optimized for performance, minimal resource usage, and easy integration into Rust projects.
Features
- Support for HTTP/HTTPS: Supports both HTTP and HTTPS protocols.
- WebSocket Support: Full WebSocket support with both synchronous and asynchronous APIs for real-time communication.
- Lightweight Design: The
http_requestcrate provides a simple and efficient API for building, sending, and handling HTTP requests while minimizing resource consumption. - Supports Common HTTP Method: Supports common HTTP methods such as GET and POST.
- Flexible Request Building: Offers rich configuration options through
RequestBuilderto set request headers, bodies, and URLs. - Simple Error Handling: Utilizes the
Resulttype to handle errors in requests and responses, making error handling straightforward. - Custom Headers and Request Bodies: Easily add custom headers and request bodies.
- Response Handling: Provides a simple wrapper around HTTP responses, making it easy to access and process response data.
- Optimized Memory Management: Implements efficient memory management to minimize unnecessary memory allocations and improve performance.
- Redirect Handling: Supports redirect handling, allows setting the maximum number of redirects, and includes redirect loop detection.
- timeout: Supports timeout.
- Automatic and Manual Response Body Decoding: Supports both automatic and manual decoding of response bodies, allowing for seamless interaction with different content types (e.g., JSON, XML, etc.).
- Proxy Support: Comprehensive proxy support including HTTP, HTTPS, and SOCKS5 proxies with authentication for both HTTP requests and WebSocket connections.
Installation
To use this crate, you can run cmd:
cargo add http-request
Synchronous
Send get request
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send post request
Send Body Json
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let body: JsonValue = json_value!;
let mut request_builder = new
.post
.json
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send Body Text
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.post
.text
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send Body Binary
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.post
.body
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send request with HTTP proxy
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.http_proxy
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send request with HTTP proxy authentication
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.http_proxy_auth
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send request with SOCKS5 proxy
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.socks5_proxy
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
Send request with SOCKS5 proxy authentication
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.socks5_proxy_auth
.build_sync;
request_builder
.send
.and_then
.unwrap_or_else;
WebSocket connection
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut websocket_builder: WebSocket = new
.connect
.headers
.timeout
.buffer
.protocols
.build_sync;
websocket_builder
.send_text
.and_then
.and_then
.and_then
.unwrap_or_else;
WebSocket with HTTP proxy
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.http_proxy
.build_sync;
match websocket_builder.send_text
WebSocket with HTTP proxy authentication
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.http_proxy_auth
.build_sync;
match websocket_builder.send_text
WebSocket with SOCKS5 proxy
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.socks5_proxy
.build_sync;
match websocket_builder.send_text
WebSocket with SOCKS5 proxy authentication
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.socks5_proxy_auth
.build_sync;
match websocket_builder.send_text
Asynchronous
Send get request
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.build_async;
match request_builder.send.await
Send post request
Send Body Json
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let body: JsonValue = json_value!;
let mut request_builder = new
.post
.json
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.build_async;
match request_builder.send.await
Send Body Text
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.post
.text
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.build_async;
match request_builder.send.await
Send Body Binary
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.post
.body
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.build_async;
match request_builder.send.await
Send request with HTTP proxy
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.http_proxy
.build_async;
match request_builder.send.await
Send request with HTTP proxy authentication
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.http_proxy_auth
.build_async;
match request_builder.send.await
Send request with SOCKS5 proxy
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.socks5_proxy
.build_async;
match request_builder.send.await
Send request with SOCKS5 proxy authentication
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut request_builder = new
.get
.headers
.timeout
.redirect
.max_redirect_times
.http1_1_only
.buffer
.decode
.socks5_proxy_auth
.build_async;
match request_builder.send.await
WebSocket connection
use *;
let mut header: = hash_map_xx_hash3_64;
header.insert;
let mut websocket_builder: WebSocket = new
.connect
.headers
.timeout
.buffer
.protocols
.build_async;
match websocket_builder.send_text_async.await
websocket_builder
.close_async_method
.await
.unwrap_or_else;
WebSocket with HTTP proxy
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.http_proxy
.build_async;
match websocket_builder.send_text_async.await
WebSocket with HTTP proxy authentication
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.http_proxy_auth
.build_async;
match websocket_builder.send_text_async.await
WebSocket with SOCKS5 proxy
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.socks5_proxy
.build_async;
match websocket_builder.send_text_async.await
WebSocket with SOCKS5 proxy authentication
use *;
let mut websocket_builder: WebSocket = new
.connect
.timeout
.buffer
.socks5_proxy_auth
.build_async;
match websocket_builder.send_text_async.await
Help
Ensure that CMake is installed on the system
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
Contact
For any inquiries, please reach out to the author at root@ltpp.vip.