Last active
July 13, 2016 03:34
-
-
Save gabeio/9b6bd5c61f5cdbf653d5a56366bfa31a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [package] | |
| name = "rnag" | |
| version = "0.1.0" | |
| [dependencies] | |
| hyper = "0.9" | |
| [[bin]] | |
| name = "rnag" | |
| path = "src/main.rs" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 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