2019-08-23 20:33:18 +02:00
|
|
|
use reqwest::header::{CONTENT_TYPE, USER_AGENT};
|
2019-09-22 02:06:00 +02:00
|
|
|
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,
|
|
|
|
as_mime: &str,
|
2019-08-23 20:33:18 +02:00
|
|
|
opt_user_agent: &str,
|
2019-08-27 05:17:36 +02:00
|
|
|
opt_silent: bool,
|
|
|
|
opt_insecure: bool,
|
2019-08-23 20:24:45 +02:00
|
|
|
) -> Result<String, reqwest::Error> {
|
2019-08-24 05:06:06 +02:00
|
|
|
if is_data_url(&url).unwrap() {
|
2019-08-23 05:17:15 +02:00
|
|
|
Ok(url.to_string())
|
|
|
|
} else {
|
2019-08-23 11:08:38 +02:00
|
|
|
let client = Client::builder()
|
|
|
|
.timeout(Duration::from_secs(10))
|
2019-08-27 05:17:36 +02:00
|
|
|
.danger_accept_invalid_certs(opt_insecure)
|
2019-08-25 05:06:40 +02:00
|
|
|
.build()?;
|
2019-09-22 02:06:00 +02:00
|
|
|
let mut response = client.get(url).header(USER_AGENT, opt_user_agent).send()?;
|
2019-08-24 19:33:24 +02:00
|
|
|
let final_url = response.url().as_str();
|
|
|
|
|
2019-08-25 17:41:30 +02:00
|
|
|
if !opt_silent {
|
|
|
|
if url == final_url {
|
|
|
|
eprintln!("[ {} ]", &url);
|
|
|
|
} else {
|
|
|
|
eprintln!("[ {} -> {} ]", &url, &final_url);
|
|
|
|
}
|
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-08-23 20:24:45 +02:00
|
|
|
let mimetype = if as_mime == "" {
|
|
|
|
response
|
|
|
|
.headers()
|
2019-08-23 05:17:15 +02:00
|
|
|
.get(CONTENT_TYPE)
|
|
|
|
.and_then(|header| header.to_str().ok())
|
2019-08-23 20:24:45 +02:00
|
|
|
.unwrap_or(&as_mime)
|
|
|
|
} else {
|
|
|
|
as_mime
|
|
|
|
};
|
2019-08-23 05:17:15 +02:00
|
|
|
|
|
|
|
Ok(data_to_dataurl(&mimetype, &data))
|
|
|
|
} else {
|
|
|
|
Ok(response.text().unwrap())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|