extern crate digest_headers;
extern crate futures;
extern crate hyper;
extern crate tokio_core;
use digest_headers::{Digest, ShaSize};
use digest_headers::use_hyper::DigestHeader;
use futures::{Future, Stream};
use hyper::{Client, Method, Request};
use hyper::header::{ContentLength, ContentType};
use tokio_core::reactor::Core;
fn main() {
let mut core = Core::new().unwrap();
let client = Client::new(&core.handle());
let uri = "http://localhost:8000".parse().unwrap();
let json = r#"{"Library":"Hyper"}"#;
let mut req = Request::new(Method::Post, uri);
req.headers_mut().set(ContentType::json());
req.headers_mut().set(ContentLength(json.len() as u64));
req.headers_mut().set(DigestHeader(Digest::new(
json.as_bytes(),
ShaSize::TwoFiftySix,
)));
req.set_body(json);
let post = client
.request(req)
.and_then(|res| {
println!("POST: {}", res.status());
res.body().concat2()
})
.and_then(|body| {
if let Ok(body) = String::from_utf8(body.to_vec()) {
println!("Received: {}", body);
} else {
println!("Garbage response body");
}
Ok(())
});
core.run(post).unwrap();
}