Use correct host on redirect. (#180)
This commit is contained in:
committed by
GitHub
parent
2d4b42e298
commit
5b75deccef
@@ -1,3 +1,9 @@
|
|||||||
|
use std::{
|
||||||
|
io::{self, Write},
|
||||||
|
net::TcpStream,
|
||||||
|
};
|
||||||
|
use test::testserver::{self, TestServer};
|
||||||
|
|
||||||
use crate::test;
|
use crate::test;
|
||||||
|
|
||||||
use super::super::*;
|
use super::super::*;
|
||||||
@@ -76,6 +82,25 @@ fn redirect_get() {
|
|||||||
assert_eq!(resp.header("x-foo").unwrap(), "bar");
|
assert_eq!(resp.header("x-foo").unwrap(), "bar");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn redirect_host() {
|
||||||
|
// Set up a redirect to a host that doesn't exist; it should fail.
|
||||||
|
let srv = TestServer::new(|mut stream: TcpStream| -> io::Result<()> {
|
||||||
|
testserver::read_headers(&stream);
|
||||||
|
write!(stream, "HTTP/1.1 302 Found\r\n")?;
|
||||||
|
write!(stream, "Location: http://example.invalid/\r\n")?;
|
||||||
|
write!(stream, "\r\n")?;
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
let url = format!("http://localhost:{}/", srv.port);
|
||||||
|
let resp = crate::get(&url).call();
|
||||||
|
assert!(
|
||||||
|
matches!(resp.synthetic_error(), Some(Error::DnsFailed(_))),
|
||||||
|
"{:?}",
|
||||||
|
resp.synthetic_error()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn redirect_post() {
|
fn redirect_post() {
|
||||||
test::set_handler("/redirect_post1", |_| {
|
test::set_handler("/redirect_post1", |_| {
|
||||||
|
|||||||
@@ -145,7 +145,10 @@ pub(crate) fn connect(
|
|||||||
) -> Result<Response, Error> {
|
) -> Result<Response, Error> {
|
||||||
//
|
//
|
||||||
|
|
||||||
let host = req.get_host()?;
|
let host = unit
|
||||||
|
.url
|
||||||
|
.host_str()
|
||||||
|
.ok_or(Error::BadUrl("no host".to_string()))?;
|
||||||
let url = &unit.url;
|
let url = &unit.url;
|
||||||
let method = &unit.req.method;
|
let method = &unit.req.method;
|
||||||
// open socket
|
// open socket
|
||||||
@@ -361,6 +364,7 @@ fn send_prelude(unit: &Unit, stream: &mut Stream, redir: bool) -> io::Result<()>
|
|||||||
// finish
|
// finish
|
||||||
write!(prelude, "\r\n")?;
|
write!(prelude, "\r\n")?;
|
||||||
|
|
||||||
|
debug!("writing prelude: {}", String::from_utf8_lossy(&prelude));
|
||||||
// write all to the wire
|
// write all to the wire
|
||||||
stream.write_all(&prelude[..])?;
|
stream.write_all(&prelude[..])?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user