feat: update fetch-rs
This commit is contained in:
@@ -1,12 +1,46 @@
|
||||
use std::str::FromStr;
|
||||
use std::time::Duration;
|
||||
|
||||
use reqwest::{Method, Proxy, Url};
|
||||
use reqwest::{Certificate, Method, Proxy, Url};
|
||||
use reqwest::blocking::{Body, Client, Request};
|
||||
use reqwest::header::{HeaderName, HeaderValue};
|
||||
use rust_util::{simple_error, XResult};
|
||||
|
||||
const TEST_CERT: &str = r#"-----BEGIN CERTIFICATE-----
|
||||
MIIDeTCCAmGgAwIBAgIJAKL5ZETgtiFQMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
|
||||
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNp
|
||||
c2NvMQ8wDQYDVQQKDAZCYWRTU0wxFTATBgNVBAMMDCouYmFkc3NsLmNvbTAeFw0y
|
||||
MzA0MjQwMDAxNDVaFw0yNTA0MjMwMDAxNDVaMGIxCzAJBgNVBAYTAlVTMRMwEQYD
|
||||
VQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ8wDQYDVQQK
|
||||
DAZCYWRTU0wxFTATBgNVBAMMDCouYmFkc3NsLmNvbTCCASIwDQYJKoZIhvcNAQEB
|
||||
BQADggEPADCCAQoCggEBAMIE7PiM7gTCs9hQ1XBYzJMY61yoaEmwIrX5lZ6xKyx2
|
||||
PmzAS2BMTOqytMAPgLaw+XLJhgL5XEFdEyt/ccRLvOmULlA3pmccYYz2QULFRtMW
|
||||
hyefdOsKnRFSJiFzbIRMeVXk0WvoBj1IFVKtsyjbqv9u/2CVSndrOfEk0TG23U3A
|
||||
xPxTuW1CrbV8/q71FdIzSOciccfCFHpsKOo3St/qbLVytH5aohbcabFXRNsKEqve
|
||||
ww9HdFxBIuGa+RuT5q0iBikusbpJHAwnnqP7i/dAcgCskgjZjFeEU4EFy+b+a1SY
|
||||
QCeFxxC7c3DvaRhBB0VVfPlkPz0sw6l865MaTIbRyoUCAwEAAaMyMDAwCQYDVR0T
|
||||
BAIwADAjBgNVHREEHDAaggwqLmJhZHNzbC5jb22CCmJhZHNzbC5jb20wDQYJKoZI
|
||||
hvcNAQELBQADggEBAJqRSkgOf5GHCJzljWQg9D+1LEuByYyQfNzGJb+TZkPpxNEw
|
||||
6gbt3vbQfWBx9WQ6995XjdjM6N6l5DO8p0Sp70OHHQ9Lt2N7PC7I5YhJFObkMyza
|
||||
sRuLWTzlYShLvSRGQFC/Ky4hTbpzlZA5TADG1weajSlIBLo6UGkQaGk4xG4zhIKA
|
||||
PhvsFZsayLexJ1DCql0XAiNnknTfX8FRMI9Ezsj0XeZ8ZD8ouLGYwbTezcYnE/uI
|
||||
0Y/ayROwdd+Ny4N6McsEE+KOxS8Xe+LU4X3MEHSXcmT8ht/xTyxQ2JjzHtS6eHjO
|
||||
lJON+7kLWv6kgtYf9jHJDsNMPLis6RbUYdkeP5A=
|
||||
-----END CERTIFICATE-----"#;
|
||||
|
||||
fn main() -> XResult<()> {
|
||||
let _ = print_response(&fetch(
|
||||
"https://self-signed.badssl.com/",
|
||||
&FetchOptions {
|
||||
trust_all_certificates: false,
|
||||
certificates: vec![TEST_CERT.into()],
|
||||
..Default::default()
|
||||
},
|
||||
)?);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main2() -> XResult<()> {
|
||||
println!("TEST1: GET");
|
||||
let response = fetch(
|
||||
"https://hatter.ink/util/print_request.action",
|
||||
@@ -90,6 +124,8 @@ pub struct FetchOptions {
|
||||
pub proxy: Option<String>,
|
||||
// TODO hsts supports
|
||||
// TODO follow redirects?
|
||||
pub certificates: Vec<String>,
|
||||
pub trust_all_certificates: bool,
|
||||
}
|
||||
|
||||
impl FetchOptions {}
|
||||
@@ -124,7 +160,18 @@ pub fn fetch(url: &str, option: &FetchOptions) -> XResult<FetchResponse> {
|
||||
if let Some(proxy) = &option.proxy {
|
||||
client_builder = client_builder.proxy(Proxy::all(proxy.as_str())?);
|
||||
}
|
||||
// TODO client_builder.add_root_certificate()
|
||||
if option.trust_all_certificates {
|
||||
client_builder = client_builder.danger_accept_invalid_certs(true);
|
||||
}
|
||||
if !option.certificates.is_empty() {
|
||||
client_builder = client_builder.use_rustls_tls();
|
||||
for cert in &option.certificates {
|
||||
match Certificate::from_pem(cert.as_bytes()) {
|
||||
Ok(cert) => client_builder = client_builder.add_root_certificate(cert),
|
||||
Err(e) => return simple_error!("Parse certificate failed: {}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
let client = client_builder.build()?;
|
||||
let method = match option.method {
|
||||
FetchMethod::Get => Method::GET,
|
||||
|
||||
Reference in New Issue
Block a user