| #![cfg(not(target_arch = "wasm32"))] |
| mod support; |
| use support::*; |
| |
| use std::env; |
| |
| #[tokio::test] |
| async fn http_proxy() { |
| let url = "http://hyper.rs/prox"; |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "hyper.rs"); |
| |
| async { http::Response::default() } |
| }); |
| |
| let proxy = format!("http://{}", server.addr()); |
| |
| let res = reqwest::Client::builder() |
| .proxy(reqwest::Proxy::http(&proxy).unwrap()) |
| .build() |
| .unwrap() |
| .get(url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| } |
| |
| #[tokio::test] |
| async fn http_proxy_basic_auth() { |
| let url = "http://hyper.rs/prox"; |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "hyper.rs"); |
| assert_eq!( |
| req.headers()["proxy-authorization"], |
| "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" |
| ); |
| |
| async { http::Response::default() } |
| }); |
| |
| let proxy = format!("http://{}", server.addr()); |
| |
| let res = reqwest::Client::builder() |
| .proxy( |
| reqwest::Proxy::http(&proxy) |
| .unwrap() |
| .basic_auth("Aladdin", "open sesame"), |
| ) |
| .build() |
| .unwrap() |
| .get(url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| } |
| |
| #[tokio::test] |
| async fn http_proxy_basic_auth_parsed() { |
| let url = "http://hyper.rs/prox"; |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "hyper.rs"); |
| assert_eq!( |
| req.headers()["proxy-authorization"], |
| "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" |
| ); |
| |
| async { http::Response::default() } |
| }); |
| |
| let proxy = format!("http://Aladdin:open sesame@{}", server.addr()); |
| |
| let res = reqwest::Client::builder() |
| .proxy(reqwest::Proxy::http(&proxy).unwrap()) |
| .build() |
| .unwrap() |
| .get(url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| } |
| |
| #[tokio::test] |
| async fn system_http_proxy_basic_auth_parsed() { |
| let url = "http://hyper.rs/prox"; |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "hyper.rs"); |
| assert_eq!( |
| req.headers()["proxy-authorization"], |
| "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" |
| ); |
| |
| async { http::Response::default() } |
| }); |
| |
| // save system setting first. |
| let system_proxy = env::var("http_proxy"); |
| |
| // set-up http proxy. |
| env::set_var( |
| "http_proxy", |
| format!("http://Aladdin:open sesame@{}", server.addr()), |
| ); |
| |
| let res = reqwest::Client::builder() |
| .build() |
| .unwrap() |
| .get(url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| |
| // reset user setting. |
| match system_proxy { |
| Err(_) => env::remove_var("http_proxy"), |
| Ok(proxy) => env::set_var("http_proxy", proxy), |
| } |
| } |
| |
| #[tokio::test] |
| async fn test_no_proxy() { |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), "/4"); |
| |
| async { http::Response::default() } |
| }); |
| let proxy = format!("http://{}", server.addr()); |
| let url = format!("http://{}/4", server.addr()); |
| |
| // set up proxy and use no_proxy to clear up client builder proxies. |
| let res = reqwest::Client::builder() |
| .proxy(reqwest::Proxy::http(&proxy).unwrap()) |
| .no_proxy() |
| .build() |
| .unwrap() |
| .get(&url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), &url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| } |
| |
| #[cfg_attr(not(feature = "__internal_proxy_sys_no_cache"), ignore)] |
| #[tokio::test] |
| async fn test_using_system_proxy() { |
| let url = "http://not.a.real.sub.hyper.rs/prox"; |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "not.a.real.sub.hyper.rs"); |
| |
| async { http::Response::default() } |
| }); |
| |
| // Note: we're relying on the `__internal_proxy_sys_no_cache` feature to |
| // check the environment every time. |
| |
| // save system setting first. |
| let system_proxy = env::var("http_proxy"); |
| // set-up http proxy. |
| env::set_var("http_proxy", format!("http://{}", server.addr())); |
| |
| // system proxy is used by default |
| let res = reqwest::get(url).await.unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| |
| // reset user setting. |
| match system_proxy { |
| Err(_) => env::remove_var("http_proxy"), |
| Ok(proxy) => env::set_var("http_proxy", proxy), |
| } |
| } |
| |
| #[tokio::test] |
| async fn http_over_http() { |
| let url = "http://hyper.rs/prox"; |
| |
| let server = server::http(move |req| { |
| assert_eq!(req.method(), "GET"); |
| assert_eq!(req.uri(), url); |
| assert_eq!(req.headers()["host"], "hyper.rs"); |
| |
| async { http::Response::default() } |
| }); |
| |
| let proxy = format!("http://{}", server.addr()); |
| |
| let res = reqwest::Client::builder() |
| .proxy(reqwest::Proxy::http(&proxy).unwrap()) |
| .build() |
| .unwrap() |
| .get(url) |
| .send() |
| .await |
| .unwrap(); |
| |
| assert_eq!(res.url().as_str(), url); |
| assert_eq!(res.status(), reqwest::StatusCode::OK); |
| } |