Skip to main content

request_builder/
main.rs

1use std::error::Error;
2use std::time::{Duration, UNIX_EPOCH};
3
4use nano_get::{RedirectPolicy, Request};
5
6fn preview_text(text: &str, max_chars: usize) -> String {
7    let mut preview: String = text.chars().take(max_chars).collect();
8    if text.chars().count() > max_chars {
9        preview.push_str("...");
10    }
11    preview
12}
13
14fn main() -> Result<(), Box<dyn Error>> {
15    let url = "http://example.com";
16    let mut request = Request::get(url)?.with_redirect_policy(RedirectPolicy::follow(5));
17
18    request.add_header("Accept", "text/html,application/xhtml+xml")?;
19    request.add_header("Cache-Control", "max-age=0")?;
20    request.if_none_match("\"demo-etag\"")?;
21    request.if_modified_since(UNIX_EPOCH + Duration::from_secs(784_111_777))?;
22    request.range_bytes(Some(0), Some(255))?;
23
24    // Protocol-managed headers such as Host and Connection are intentionally rejected by the
25    // library. This example only uses safe end-to-end request headers.
26    let response = request.execute()?;
27
28    println!("manual request to {url}");
29    println!(
30        "status: {} {}",
31        response.status_code, response.reason_phrase
32    );
33    println!("content-type: {:?}", response.header("content-type"));
34    println!("body preview: {}", preview_text(response.body_text()?, 80));
35
36    Ok(())
37}