//#![deny(warnings)] extern crate futures; extern crate hyper; extern crate tokio_core; extern crate pretty_env_logger; use std::env; use std::io::{self, Write}; use futures::Future; use futures::stream::Stream; use hyper::{Body, Client, Request}; fn main() { pretty_env_logger::init(); let url = match env::args().nth(1) { Some(url) => url, None => { println!("Usage: client "); return; } }; let url = url.parse::().unwrap(); if url.scheme_part().map(|s| s.as_ref()) != Some("http") { println!("This example only works with 'http' URLs."); return; } let mut core = tokio_core::reactor::Core::new().unwrap(); let handle = core.handle(); let client = Client::new(&handle); let mut req = Request::new(Body::empty()); *req.uri_mut() = url; let work = client.request(req).and_then(|res| { println!("Response: {}", res.status()); println!("Headers: {:#?}", res.headers()); res.into_parts().1.into_stream().for_each(|chunk| { io::stdout().write_all(&chunk).map_err(From::from) }) }).map(|_| { println!("\n\nDone."); }); core.run(work).unwrap(); }