query string in path

This commit is contained in:
Martin Algesten
2018-06-17 10:13:36 +02:00
parent 9514bd2743
commit b860a3c146
5 changed files with 47 additions and 8 deletions

View File

@@ -29,11 +29,14 @@ impl ConnectionPool {
.unwrap_or(false);
let hostname = url.host_str().unwrap_or("localhost"); // is localhost a good alternative?
let query_string = if request.query.len() > 0 {
format!("{}", request.query)
} else {
"".to_string()
let query_string = match (url.query(), request.query.len() > 0) {
(Some(urlq), true) => format!("?{}{}", urlq, request.query),
(Some(urlq), false) => format!("?{}", urlq),
(None, true) => format!("?{}", request.query),
(None, false) => "".to_string(),
};
let is_secure = url.scheme().eq_ignore_ascii_case("https");
let cookie_headers: Vec<_> = {

View File

@@ -27,3 +27,28 @@ fn escaped_query_string() {
let s = String::from_utf8_lossy(&vec);
assert!(s.contains("GET /escaped_query_string?foo=bar&baz=yo%20lo HTTP/1.1"))
}
#[test]
fn query_in_path() {
test::set_handler("/query_in_path", |_req, _url| {
test::make_response(200, "OK", vec![], vec![])
});
let resp = get("test://host/query_in_path?foo=bar").call();
let vec = resp.to_write_vec();
let s = String::from_utf8_lossy(&vec);
assert!(s.contains("GET /query_in_path?foo=bar HTTP/1.1"))
}
#[test]
fn query_in_path_and_req() {
test::set_handler("/query_in_path_and_req", |_req, _url| {
test::make_response(200, "OK", vec![], vec![])
});
let resp = get("test://host/query_in_path_and_req?foo=bar")
.query("baz", "1 2 3")
.call();
let vec = resp.to_write_vec();
let s = String::from_utf8_lossy(&vec);
println!("{}", s);
assert!(s.contains("GET /query_in_path_and_req?foo=barbaz=1%202%203 HTTP/1.1"))
}

View File

@@ -84,3 +84,14 @@ fn body_as_reader() {
reader.read_to_string(&mut text).unwrap();
assert_eq!(text, "abcdefgh");
}
#[test]
fn escape_path() {
test::set_handler("/escape_path%20here", |_req, _url| {
test::make_response(200, "OK", vec![], vec![])
});
let resp = get("test://host/escape_path here").call();
let vec = resp.to_write_vec();
let s = String::from_utf8_lossy(&vec);
assert!(s.contains("GET /escape_path%20here HTTP/1.1"))
}