Skip to content

Instantly share code, notes, and snippets.

@gabeio
Last active July 13, 2016 03:34
Show Gist options
  • Select an option

  • Save gabeio/9b6bd5c61f5cdbf653d5a56366bfa31a to your computer and use it in GitHub Desktop.

Select an option

Save gabeio/9b6bd5c61f5cdbf653d5a56366bfa31a to your computer and use it in GitHub Desktop.
[package]
name = "rnag"
version = "0.1.0"
[dependencies]
hyper = "0.9"
[[bin]]
name = "rnag"
path = "src/main.rs"
// std
use std::io::Read;
// external hyper
extern crate hyper;
use hyper::client::{Client, Response, RedirectPolicy};
use hyper::header::{Accept, AcceptLanguage, Headers, Cookie, CookieJar, Referer, SetCookie, UserAgent, QualityItem, Quality, qitem};
use hyper::LanguageTag;
use hyper::mime::{Mime, TopLevel, SubLevel};
fn main() {
let mut client = Client::new();
client.set_redirect_policy(RedirectPolicy::FollowNone);
let mut jar = CookieJar::new(b"");
// HEADERS
let mut headers = Headers::new();
let accept: Accept = Accept(vec![
qitem(Mime(TopLevel::Text, SubLevel::Html, vec![])),
qitem(Mime(TopLevel::Application, SubLevel::Ext("xhtml+xml".to_owned()), vec![])),
QualityItem::new(Mime(TopLevel::Application, SubLevel::Xml, vec![]), Quality(900)),
qitem(Mime(TopLevel::Image, SubLevel::Ext("webp".to_owned()), vec![])),
QualityItem::new(Mime(TopLevel::Star, SubLevel::Star, vec![]), Quality(800)),
]);
headers.set::<Accept>(accept);
let mut langtag: LanguageTag = Default::default();
langtag.language = Some("en".to_owned());
langtag.region = Some("US".to_owned());
let accept_lang: AcceptLanguage = AcceptLanguage(vec![
qitem(langtag)
]);
headers.set::<AcceptLanguage>(accept_lang);
let user_agent: UserAgent = UserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.8 Safari/537.36".to_owned());
headers.set::<UserAgent>(user_agent);
let mut referer: Referer;
let mut url: String;
// let mut uri: &str;
{
url = "http://httpbin.org/ip".to_owned();
let mut body: String = String::new();
let mut res = get(&client,
&headers,
&mut jar,
&url[..]);
res.read_to_string(&mut body).unwrap();
println!("{}", body);
referer = Referer(url.clone());
headers.set::<Referer>(referer);
}
{
url = "http://httpbin.org/cookies/set?test=ing".to_owned();
let mut body: String = String::new();
let mut res = get(&client,
&headers,
&mut jar,
&url[..]);
println!("{}", res.headers);
res.read_to_string(&mut body).expect("res.read_to_string() failed");
println!("{}", body);
referer = Referer(url.clone());
headers.set::<Referer>(referer);
}
{
url = "http://httpbin.org/cookies/set?asdf=asdf".to_owned();
let mut body: String = String::new();
let mut res = get(&client,
&headers,
&mut jar,
&url[..]);
println!("{}", res.headers);
res.read_to_string(&mut body).expect("res.read_to_string() failed");
println!("{}", body);
referer = Referer(url.clone());
headers.set::<Referer>(referer);
}
{
url = "http://httpbin.org/cookies".to_owned();
let mut body: String = String::new();
let mut res = get(&client,
&headers,
&mut jar,
&url[..]);
println!("{}", res.headers);
res.read_to_string(&mut body).expect("res.read_to_string() failed");
println!("{}", body);
}
{
url = "http://httpbin.org/headers".to_owned();
let mut body: String = String::new();
let mut res = get(&client,
&headers,
&mut jar,
&url[..]);
println!("{}", res.headers);
res.read_to_string(&mut body).expect("res.read_to_string() failed");
println!("{}", body);
}
{
url = "http://httpbin.org/post".to_owned();
let mut body: String = String::new();
let mut res = post(&client,
&headers,
&mut jar,
&url[..],
&r#"{ "msg": "Just trust in the Rust!" }"#);
println!("{}", res.headers);
res.read_to_string(&mut body).expect("res.read_to_string() failed");
println!("{}", body);
}
}
fn get<'a>(cli: &Client, hdr: &Headers, mut jar: &mut CookieJar, url: &'a str) -> Response {
let res = match cli.get(url)
.headers(hdr.clone())
.header(Cookie::from_cookie_jar(jar))
.send() {
Ok(res) => res,
Err(_) => panic!("GET failed"),
};
if res.headers.has::<SetCookie>() {
res.headers.get::<SetCookie>().unwrap().apply_to_cookie_jar(&mut jar);
} else {
println!("no set-cookies were present")
}
// if res.headers.has::<Cookie>() {
// let cookie_jar: &Cookie = res.headers.get::<Cookie>().unwrap();
// for pair in cookie_jar.iter() {
// jar.add(pair.clone());
// }
// } else {
// println!("no cookies were present");
// }
return res;
}
fn post<'a>(cli: &Client, hdr: &Headers, mut jar: &mut CookieJar, url: &'a str, data: &'a str) -> Response {
let res = match cli.post(url)
.headers(hdr.clone())
.header(Cookie::from_cookie_jar(jar))
.body(data)
.send() {
Ok(res) => res,
Err(_) => panic!("POST failed"),
};
if res.headers.has::<SetCookie>() {
res.headers.get::<SetCookie>().unwrap().apply_to_cookie_jar(&mut jar);
} else {
println!("no set-cookies were present")
}
// if res.headers.has::<Cookie>() {
// let cookie_jar: &Cookie = res.headers.get::<Cookie>().unwrap();
// for pair in cookie_jar.iter() {
// jar.add(pair.clone());
// }
// } else {
// println!("no cookies were present");
// }
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment