use std::time::Duration;
use web_faith::{FaithError, agent::Agent, request::Request};
#[tokio::main]
async fn main() -> Result<(), FaithError> {
let url = std::env::args()
.nth(1)
.unwrap_or_else(|| "https://example.com/".into());
let agent = Agent::builder()
.user_agent(format!("fetch-example/1.0 {}", web_faith::USER_AGENT))
.timeout(|timeout| timeout.total(Duration::from_secs(30)).build())
.build()?;
let response = agent.fetch(url.as_str()).await?;
println!("{} {}", response.status(), response.url());
println!("{} over {:?}", response.status_text(), response.version());
let body = response.text().await?;
println!("{} bytes of body", body.len());
let probe = Request::new(url.as_str())
.method("HEAD")
.header("x-example", "prepared")
.build()?;
for _ in 0..2 {
let response = agent
.fetch(probe.try_clone().expect("no stream body"))
.await?;
println!("HEAD -> {}", response.status());
}
agent.close();
println!("closed: {}", agent.is_closed());
Ok(())
}