monolith/src/http.rs

56 lines
1.6 KiB
Rust
Raw Normal View History

2019-08-23 20:33:18 +02:00
use reqwest::header::{CONTENT_TYPE, USER_AGENT};
use reqwest::Client;
2019-08-23 11:08:38 +02:00
use std::time::Duration;
2019-09-29 23:15:49 +02:00
use utils::{data_to_dataurl, is_data_url};
2019-08-23 05:17:15 +02:00
2019-08-23 20:24:45 +02:00
pub fn retrieve_asset(
url: &str,
as_dataurl: bool,
2019-10-01 05:58:09 +02:00
mime: &str,
2019-08-23 20:33:18 +02:00
opt_user_agent: &str,
opt_silent: bool,
opt_insecure: bool,
2019-10-01 05:58:09 +02:00
) -> Result<(String, String), reqwest::Error> {
if is_data_url(&url).unwrap() {
2019-10-01 05:58:09 +02:00
Ok((url.to_string(), url.to_string()))
2019-08-23 05:17:15 +02:00
} else {
2019-08-23 11:08:38 +02:00
let client = Client::builder()
.timeout(Duration::from_secs(10))
.danger_accept_invalid_certs(opt_insecure)
2019-08-25 05:06:40 +02:00
.build()?;
let mut response = client.get(url).header(USER_AGENT, opt_user_agent).send()?;
2019-08-24 19:33:24 +02:00
2019-08-25 17:41:30 +02:00
if !opt_silent {
2019-10-01 05:58:09 +02:00
if url == response.url().as_str() {
2019-08-25 17:41:30 +02:00
eprintln!("[ {} ]", &url);
} else {
2019-10-01 05:58:09 +02:00
eprintln!("[ {} -> {} ]", &url, &response.url().as_str());
2019-08-25 17:41:30 +02:00
}
2019-08-24 19:33:24 +02:00
}
2019-08-23 05:17:15 +02:00
if as_dataurl {
// Convert response into a byte array
let mut data: Vec<u8> = vec![];
response.copy_to(&mut data)?;
// Attempt to obtain MIME type by reading the Content-Type header
2019-10-01 05:58:09 +02:00
let mimetype = if mime == "" {
2019-08-23 20:24:45 +02:00
response
.headers()
2019-08-23 05:17:15 +02:00
.get(CONTENT_TYPE)
.and_then(|header| header.to_str().ok())
2019-10-01 05:58:09 +02:00
.unwrap_or(&mime)
2019-08-23 20:24:45 +02:00
} else {
2019-10-01 05:58:09 +02:00
mime
2019-08-23 20:24:45 +02:00
};
2019-08-23 05:17:15 +02:00
2019-10-01 05:58:09 +02:00
Ok((
data_to_dataurl(&mimetype, &data),
response.url().to_string(),
))
2019-08-23 05:17:15 +02:00
} else {
2019-10-01 05:58:09 +02:00
Ok((response.text().unwrap(), response.url().to_string()))
2019-08-23 05:17:15 +02:00
}
}
}