use reqres::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== reqres v0.4.0 HTTP/2 Client Demo ===\n");
let client = Client::new()?;
println!("Sending HTTP/2 GET request to httpbin.org (supports HTTP/2)...");
match client.get("https://httpbin.org/get").await {
Ok(response) => {
println!("✓ HTTP/2 request successful!");
println!(" Status: {} {}", response.status(), response.status_text);
println!(" Version: {}", response.version);
if response.version == "HTTP/2.0" {
println!(" ✓ Using HTTP/2 protocol!");
} else {
println!(" ⚠ Using HTTP/1.1 (server might not support HTTP/2)");
}
println!("\n Response headers:");
for (key, value) in &response.headers {
println!(" {}: {}", key, value);
}
if let Ok(text) = response.text() {
let preview = if text.len() > 500 {
&text[..500]
} else {
&text
};
println!("\n Body preview:\n{}", preview);
}
}
Err(e) => {
eprintln!("✗ HTTP/2 request failed: {}", e);
}
}
println!("\n{}\n", &"=".repeat(50));
println!("Sending HTTP/2 POST request...");
let json_data = serde_json::json!({
"test": "HTTP/2",
"version": "0.3.0",
"features": ["Multiplexing", "Header Compression", "Server Push"]
});
let request = reqres::Request::post("https://httpbin.org/post")
.json(&json_data)?
.build()?;
match client.request(request).await {
Ok(response) => {
println!("✓ HTTP/2 POST request successful!");
println!(" Status: {} {}", response.status(), response.status_text);
println!(" Version: {}", response.version);
if response.version == "HTTP/2.0" {
println!(" ✓ Using HTTP/2 protocol!");
}
if let Ok(text) = response.text() {
let preview = if text.len() > 500 {
&text[..500]
} else {
&text
};
println!("\n Body preview:\n{}", preview);
}
}
Err(e) => {
eprintln!("✗ HTTP/2 POST request failed: {}", e);
}
}
println!("\n{}\n", &"=".repeat(50));
println!("Testing HTTP/1.1 only (HTTP/2 disabled)...");
let client_h1_only = Client::builder()
.http1_only()
.build()?;
match client_h1_only.get("https://httpbin.org/get").await {
Ok(response) => {
println!("✓ HTTP/1.1 only request successful!");
println!(" Status: {} {}", response.status(), response.status_text);
println!(" Version: {}", response.version);
println!(" ✓ Forcefully using HTTP/1.1");
}
Err(e) => {
eprintln!("✗ HTTP/1.1 only request failed: {}", e);
}
}
println!("\n=== Demo completed ===");
Ok(())
}