use reqwest::{redirect::Policy, Client}; use select::{document::Document, predicate::Name}; use std::time::Duration; use super::console::parsehit; pub fn mkclient(redir: bool) -> Result { let rpolicy: Policy = if redir { Policy::limited(5) } else { Policy::none() }; Client::builder() .user_agent("buttplug/1.0") .redirect(rpolicy) .timeout(Duration::from_secs(2)) .connect_timeout(Duration::from_millis(500)) .build() } pub async fn query( c: Client, url: &str, codes: Vec, exclude: bool, ) -> Result<(), reqwest::Error> { let response = c.get(format!("http://{url}/")).send().await?; let statcode = response.status().as_u16(); if codes.len() > 0 { if codes.contains(&statcode) { if exclude { return Ok(()); } } else if !exclude { return Ok(()); } } let sc = response.status().as_u16(); let url: String = response.url().to_string(); let body = response.text().await?; // Parse the HTML document let document = Document::from(body.as_str()); // Use select to find the tag let title = document .find(Name("title")) .next() .map(|n| n.text()) .unwrap_or_else(|| "".to_string()); println!( "{}", parsehit(sc, url, title.trim_matches(['\n', '\t', '\r'])) ); Ok(()) }