| Crates.io | http-request |
| lib.rs | http-request |
| version | 8.91.26 |
| created_at | 2024-11-29 01:36:52.31709+00 |
| updated_at | 2025-09-14 08:13:51.747585+00 |
| description | http-request is a lightweight, efficient library for building, sending, and handling HTTP/HTTPS requests in Rust applications. It 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. |
| homepage | |
| repository | https://github.com/crates-dev/http-request.git |
| max_upload_size | |
| id | 1465127 |
| size | 289,722 |
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.
http_request crate provides a simple and efficient API for building, sending, and handling HTTP requests while minimizing resource consumption.RequestBuilder to set request headers, bodies, and URLs.Result type to handle errors in requests and responses, making error handling straightforward.To use this crate, you can run cmd:
cargo add http-request
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let body: JsonValue = json_value!({
"test": 1
});
let mut request_builder = RequestBuilder::new()
.post("http://code.ltpp.vip")
.json(body)
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.decode(4096).text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.post("http://ide.ltpp.vip/?language=rust")
.text("hello")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.post("http://ide.ltpp.vip/?language=rust")
.body("hello".as_bytes())
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.decode(4096).text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.http_proxy("127.0.0.1", 7890)
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.http_proxy_auth("127.0.0.1", 7890, "username", "password")
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("http://ide.ltpp.vip/?language=rust")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.socks5_proxy("127.0.0.1", 1080)
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("http://ide.ltpp.vip/?language=rust")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.socks5_proxy_auth("127.0.0.1", 1080, "username", "password")
.build_sync();
request_builder
.send()
.and_then(|response| {
println!("{:?}", response.text());
Ok(())
})
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("Authorization", "Bearer test-token");
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.headers(header)
.timeout(10000)
.buffer(4096)
.protocols(&["chat", "superchat"])
.build_sync();
websocket_builder
.send_text("Hello WebSocket!")
.and_then(|_| {
println!("Sync WebSocket text message sent successfully");
websocket_builder.send_binary(b"binary data")
})
.and_then(|_| {
println!("Sync WebSocket binary message sent successfully");
match websocket_builder.receive() {
Ok(message) => match message {
WebSocketMessage::Text(text) => println!("Received text: {}", text),
WebSocketMessage::Binary(data) => println!("Received binary: {:?}", data),
WebSocketMessage::Close => println!("Connection closed"),
_ => println!("Received other message type"),
},
Err(e) => println!("Error receiving message: {}", e),
}
Ok(())
})
.and_then(|_| websocket_builder.close())
.unwrap_or_else(|e| println!("Error => {}", e));
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.http_proxy("127.0.0.1", 7890)
.build_sync();
match websocket_builder.send_text("Hello WebSocket with HTTP proxy!") {
Ok(_) => println!("WebSocket HTTP proxy message sent successfully"),
Err(e) => println!("WebSocket HTTP proxy error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.http_proxy_auth("127.0.0.1", 7890, "username", "password")
.build_sync();
match websocket_builder.send_text("Hello WebSocket with HTTP proxy auth!") {
Ok(_) => println!("WebSocket HTTP proxy auth message sent successfully"),
Err(e) => println!("WebSocket HTTP proxy auth error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.socks5_proxy("127.0.0.1", 1080)
.build_sync();
match websocket_builder.send_text("Hello WebSocket with SOCKS5 proxy!") {
Ok(_) => println!("WebSocket SOCKS5 proxy message sent successfully"),
Err(e) => println!("WebSocket SOCKS5 proxy error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.socks5_proxy_auth("127.0.0.1", 1080, "username", "password")
.build_sync();
match websocket_builder.send_text("Hello WebSocket with SOCKS5 proxy auth!") {
Ok(_) => println!("WebSocket SOCKS5 proxy auth message sent successfully"),
Err(e) => println!("WebSocket SOCKS5 proxy auth error: {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let body: JsonValue = json_value!({
"test": 1
});
let mut request_builder = RequestBuilder::new()
.post("http://code.ltpp.vip")
.json(body)
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.decode(4096).text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.post("http://ide.ltpp.vip/?language=rust")
.text("hello")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.post("http://ide.ltpp.vip/?language=rust")
.body("hello".as_bytes())
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.decode(4096).text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.http_proxy("127.0.0.1", 7890)
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("https://ltpp.vip/")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.http_proxy_auth("127.0.0.1", 7890, "username", "password")
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("http://ide.ltpp.vip/?language=rust")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.socks5_proxy("127.0.0.1", 1080)
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("header-key", "header-value");
let mut request_builder = RequestBuilder::new()
.get("http://ide.ltpp.vip/?language=rust")
.headers(header)
.timeout(6000)
.redirect()
.max_redirect_times(8)
.http1_1_only()
.buffer(4096)
.decode()
.socks5_proxy_auth("127.0.0.1", 1080, "username", "password")
.build_async();
match request_builder.send().await {
Ok(response) => {
println!("{:?}", response.text());
}
Err(e) => println!("Error => {}", e),
}
use http_request::*;
let mut header: HashMapXxHash3_64<&str, &str> = hash_map_xx_hash3_64();
header.insert("Authorization", "Bearer test-token");
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.headers(header)
.timeout(10000)
.buffer(4096)
.protocols(&["chat", "superchat"])
.build_async();
match websocket_builder.send_text_async("Hello WebSocket!").await {
Ok(_) => {
println!("Async WebSocket text message sent successfully");
match websocket_builder.send_binary_async(b"binary data").await {
Ok(_) => {
println!("Async WebSocket binary message sent successfully");
match websocket_builder.receive_async().await {
Ok(message) => match message {
WebSocketMessage::Text(text) => println!("Received text: {}", text),
WebSocketMessage::Binary(data) => println!("Received binary: {:?}", data),
WebSocketMessage::Close => println!("Connection closed"),
_ => println!("Received other message type"),
},
Err(e) => println!("Error receiving message: {}", e),
}
}
Err(e) => println!("Error sending binary: {}", e),
}
}
Err(e) => println!("Error sending text: {}", e),
}
websocket_builder
.close_async_method()
.await
.unwrap_or_else(|e| println!("Error closing: {}", e));
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.http_proxy("127.0.0.1", 7890)
.build_async();
match websocket_builder.send_text_async("Hello WebSocket with HTTP proxy!").await {
Ok(_) => println!("Async WebSocket HTTP proxy message sent successfully"),
Err(e) => println!("Async WebSocket HTTP proxy error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.http_proxy_auth("127.0.0.1", 7890, "username", "password")
.build_async();
match websocket_builder.send_text_async("Hello WebSocket with HTTP proxy auth!").await {
Ok(_) => println!("Async WebSocket HTTP proxy auth message sent successfully"),
Err(e) => println!("Async WebSocket HTTP proxy auth error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.socks5_proxy("127.0.0.1", 1080)
.build_async();
match websocket_builder.send_text_async("Hello WebSocket with SOCKS5 proxy!").await {
Ok(_) => println!("Async WebSocket SOCKS5 proxy message sent successfully"),
Err(e) => println!("Async WebSocket SOCKS5 proxy error: {}", e),
}
use http_request::*;
let mut websocket_builder: WebSocket = WebSocketBuilder::new()
.connect("ws://127.0.0.1:60006/api/ws?uuid=1")
.timeout(10000)
.buffer(4096)
.socks5_proxy_auth("127.0.0.1", 1080, "username", "password")
.build_async();
match websocket_builder.send_text_async("Hello WebSocket with SOCKS5 proxy auth!").await {
Ok(_) => println!("Async WebSocket SOCKS5 proxy auth message sent successfully"),
Err(e) => println!("Async WebSocket SOCKS5 proxy auth error: {}", e),
}
Ensure that CMake is installed on the system
This project is licensed under the MIT License. See the LICENSE file for details.
Contributions are welcome! Please open an issue or submit a pull request.
For any inquiries, please reach out to the author at root@ltpp.vip.