Add more parameters to cureq example (#371)
This commit is contained in:
committed by
GitHub
parent
4ade506047
commit
5e4b37a393
@@ -1,6 +1,7 @@
|
|||||||
use std::error;
|
use std::error;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io;
|
use std::io;
|
||||||
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{env, sync::Arc};
|
use std::{env, sync::Arc};
|
||||||
|
|
||||||
@@ -64,8 +65,19 @@ impl From<io::Error> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get(agent: &ureq::Agent, url: &str, print_headers: bool) -> Result<(), Error> {
|
fn perform(
|
||||||
let response = agent.get(url).call()?;
|
agent: &ureq::Agent,
|
||||||
|
method: &str,
|
||||||
|
url: &str,
|
||||||
|
data: &[u8],
|
||||||
|
print_headers: bool,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
let req = agent.request(method, url);
|
||||||
|
let response = if method == "GET" && data.len() == 0 {
|
||||||
|
req.call()?
|
||||||
|
} else {
|
||||||
|
req.send_bytes(data)?
|
||||||
|
};
|
||||||
if print_headers {
|
if print_headers {
|
||||||
println!(
|
println!(
|
||||||
"{} {} {}",
|
"{} {} {}",
|
||||||
@@ -108,29 +120,43 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main2() -> Result<(), Error> {
|
fn main2() -> Result<(), Error> {
|
||||||
let mut args: Vec<String> = env::args().collect();
|
let mut args = env::args();
|
||||||
if args.len() == 1 {
|
if args.next().is_none() {
|
||||||
println!(
|
println!(
|
||||||
r##"Usage: {:#?} url [url ...]
|
r##"Usage: {:#?} url [url ...]
|
||||||
|
|
||||||
|
-i Include headers when printing response
|
||||||
|
-X <method> Use the given request method (GET, POST, etc)
|
||||||
|
-d <string> Use the given data as the request body (useful for POST)
|
||||||
|
--wait <n> Wait n seconds between requests
|
||||||
|
-k Ignore certificate errors
|
||||||
|
|
||||||
Fetch url and copy it to stdout.
|
Fetch url and copy it to stdout.
|
||||||
"##,
|
"##,
|
||||||
env::current_exe()?
|
env::current_exe()?
|
||||||
);
|
);
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
args.remove(0);
|
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
let mut builder = ureq::builder()
|
let mut builder = ureq::builder()
|
||||||
.timeout_connect(Duration::from_secs(30))
|
.timeout_connect(Duration::from_secs(30))
|
||||||
.timeout(Duration::from_secs(300));
|
.timeout(Duration::from_secs(300));
|
||||||
let flags: Vec<&String> = args.iter().filter(|s| s.starts_with("-")).collect();
|
let mut nonflags: Vec<String> = vec![];
|
||||||
let nonflags: Vec<&String> = args.iter().filter(|s| !s.starts_with("-")).collect();
|
|
||||||
|
|
||||||
let mut print_headers: bool = false;
|
let mut print_headers: bool = false;
|
||||||
for flag in flags {
|
let mut method: String = "GET".into();
|
||||||
match flag.as_ref() {
|
let mut data: Vec<u8> = vec![];
|
||||||
|
let mut wait = Duration::new(0, 0);
|
||||||
|
while let Some(arg) = args.next() {
|
||||||
|
match arg.as_ref() {
|
||||||
"-i" => print_headers = true,
|
"-i" => print_headers = true,
|
||||||
|
"-X" => method = args.next().expect("flag -X requires a value"),
|
||||||
|
"-d" => data = args.next().expect("flag -d requires a value").into(),
|
||||||
|
"--wait" => {
|
||||||
|
let wait_string: String = args.next().expect("flag --wait requires a value").into();
|
||||||
|
let wait_seconds: u64 = wait_string.parse().expect("invalid --wait flag");
|
||||||
|
wait = Duration::from_secs(wait_seconds);
|
||||||
|
}
|
||||||
"-k" => {
|
"-k" => {
|
||||||
let mut client_config = ClientConfig::new();
|
let mut client_config = ClientConfig::new();
|
||||||
client_config
|
client_config
|
||||||
@@ -138,14 +164,22 @@ Fetch url and copy it to stdout.
|
|||||||
.set_certificate_verifier(Arc::new(AcceptAll {}));
|
.set_certificate_verifier(Arc::new(AcceptAll {}));
|
||||||
builder = builder.tls_config(Arc::new(client_config));
|
builder = builder.tls_config(Arc::new(client_config));
|
||||||
}
|
}
|
||||||
f => Err(StringError(format!("unrecognized flag '{}'", f)))?,
|
arg => {
|
||||||
|
if arg.starts_with("-") {
|
||||||
|
Err(StringError(format!("unrecognized flag '{}'", arg)))?;
|
||||||
|
}
|
||||||
|
nonflags.push(arg.to_owned());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let agent = builder.build();
|
let agent = builder.build();
|
||||||
|
|
||||||
for url in nonflags {
|
for (i, url) in nonflags.iter().enumerate() {
|
||||||
get(&agent, &url, print_headers)?;
|
perform(&agent, &method, &url, &data, print_headers)?;
|
||||||
|
if i != nonflags.len() - 1 {
|
||||||
|
thread::sleep(wait);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user