committed by
Sean McArthur
parent
9e70497781
commit
a54447c1d9
@@ -198,57 +198,62 @@ impl<'a> RequestBuilder<'a> {
|
|||||||
|
|
||||||
try!(req.send())
|
try!(req.send())
|
||||||
};
|
};
|
||||||
body.take();
|
|
||||||
|
|
||||||
match res.status {
|
let should_redirect = match res.status {
|
||||||
StatusCode::MovedPermanently |
|
StatusCode::MovedPermanently |
|
||||||
StatusCode::Found |
|
StatusCode::Found |
|
||||||
StatusCode::SeeOther => {
|
StatusCode::SeeOther => {
|
||||||
|
body = None;
|
||||||
//TODO: turn this into self.redirect_policy.check()
|
match method {
|
||||||
if redirect_count > 10 {
|
Method::Get | Method::Head => {},
|
||||||
return Err(::Error::TooManyRedirects);
|
_ => {
|
||||||
|
method = Method::Get;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
redirect_count += 1;
|
true
|
||||||
|
|
||||||
method = match method {
|
|
||||||
Method::Post | Method::Put => Method::Get,
|
|
||||||
m => m
|
|
||||||
};
|
|
||||||
|
|
||||||
headers.set(Referer(url.to_string()));
|
|
||||||
|
|
||||||
let loc = {
|
|
||||||
let loc = res.headers.get::<Location>().map(|loc| url.join(loc));
|
|
||||||
if let Some(loc) = loc {
|
|
||||||
loc
|
|
||||||
} else {
|
|
||||||
return Ok(Response {
|
|
||||||
inner: res
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
url = match loc {
|
|
||||||
Ok(u) => u,
|
|
||||||
Err(e) => {
|
|
||||||
debug!("Location header had invalid URI: {:?}", e);
|
|
||||||
return Ok(Response {
|
|
||||||
inner: res
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
debug!("redirecting to '{}'", url);
|
|
||||||
|
|
||||||
//TODO: removeSensitiveHeaders(&mut headers, &url);
|
|
||||||
|
|
||||||
},
|
},
|
||||||
_ => {
|
StatusCode::TemporaryRedirect |
|
||||||
return Ok(Response {
|
StatusCode::PermanentRedirect => true,
|
||||||
inner: res
|
_ => false,
|
||||||
});
|
};
|
||||||
|
|
||||||
|
if should_redirect {
|
||||||
|
//TODO: turn this into self.redirect_policy.check()
|
||||||
|
if redirect_count > 10 {
|
||||||
|
return Err(::Error::TooManyRedirects);
|
||||||
}
|
}
|
||||||
|
redirect_count += 1;
|
||||||
|
|
||||||
|
headers.set(Referer(url.to_string()));
|
||||||
|
|
||||||
|
let loc = {
|
||||||
|
let loc = res.headers.get::<Location>().map(|loc| url.join(loc));
|
||||||
|
if let Some(loc) = loc {
|
||||||
|
loc
|
||||||
|
} else {
|
||||||
|
return Ok(Response {
|
||||||
|
inner: res
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
url = match loc {
|
||||||
|
Ok(u) => u,
|
||||||
|
Err(e) => {
|
||||||
|
debug!("Location header had invalid URI: {:?}", e);
|
||||||
|
return Ok(Response {
|
||||||
|
inner: res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
debug!("redirecting to {:?} '{}'", method, url);
|
||||||
|
|
||||||
|
//TODO: removeSensitiveHeaders(&mut headers, &url);
|
||||||
|
} else {
|
||||||
|
return Ok(Response {
|
||||||
|
inner: res
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user