Use rust-http typed headers

This commit is contained in:
Keegan McAllister 2013-10-09 17:00:56 -07:00
parent 48af4e53a9
commit ec2111edbf

View file

@ -35,27 +35,23 @@ fn load(url: Url, start_chan: Chan<LoadResponse>) {
} }
}; };
info!("got HTTP response %s, headers:", response.status.to_str()) // Dump headers, but only do the iteration if info!() is enabled.
info!("got HTTP response %s, headers:", response.status.to_str());
let is_redirect = 3 == (response.status.code() / 100); info!("%?",
let mut redirect: Option<Url> = None;
for header in response.headers.iter() { for header in response.headers.iter() {
let name = header.header_name(); info!(" - %s: %s", header.header_name(), header.header_value());
let value = header.header_value(); });
info!(" - %s: %s", name, value);
if is_redirect && ("Location" == name) {
redirect = Some(FromStr::from_str(value).expect("Failed to parse redirect URL"));
}
}
// FIXME: detect redirect loops // FIXME: detect redirect loops
match redirect { if 3 == (response.status.code() / 100) {
match response.headers.location {
Some(url) => { Some(url) => {
info!("redirecting to %s", url.to_str()); info!("redirecting to %s", url.to_str());
return load(url, start_chan); return load(url, start_chan);
} }
None => () None => ()
} }
}
let mut metadata = Metadata::default(url); let mut metadata = Metadata::default(url);
// We will set other fields here. // We will set other fields here.