Add handling of 307 and 308 redirects

Fixes #9
This commit is contained in:
Aidan Hobson Sayers
2016-11-17 22:38:19 +00:00
committed by Sean McArthur
parent 9e70497781
commit a54447c1d9

View File

@@ -198,24 +198,32 @@ impl<'a> RequestBuilder<'a> {
try!(req.send())
};
body.take();
match res.status {
let should_redirect = match res.status {
StatusCode::MovedPermanently |
StatusCode::Found |
StatusCode::SeeOther => {
body = None;
match method {
Method::Get | Method::Head => {},
_ => {
method = Method::Get;
}
}
true
},
StatusCode::TemporaryRedirect |
StatusCode::PermanentRedirect => true,
_ => false,
};
if should_redirect {
//TODO: turn this into self.redirect_policy.check()
if redirect_count > 10 {
return Err(::Error::TooManyRedirects);
}
redirect_count += 1;
method = match method {
Method::Post | Method::Put => Method::Get,
m => m
};
headers.set(Referer(url.to_string()));
let loc = {
@@ -239,19 +247,16 @@ impl<'a> RequestBuilder<'a> {
}
};
debug!("redirecting to '{}'", url);
debug!("redirecting to {:?} '{}'", method, url);
//TODO: removeSensitiveHeaders(&mut headers, &url);
},
_ => {
} else {
return Ok(Response {
inner: res
});
}
}
}
}
}
/// A Response to a submitted `Request`.