1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
#![deny(warnings)] #![deny(missing_docs)] //! # reqwest //! //! The `reqwest` crate provides a convenient, higher-level HTTP Client. //! //! It handles many of the things that most people just expect an HTTP client //! to do for them. //! //! - Uses system-native TLS //! - Plain bodies, JSON, urlencoded, (TODO: multipart) //! - (TODO: Customizable redirect policy) //! - (TODO: Cookies) //! //! The `reqwest::Client` is synchronous, making it a great fit for //! applications that only require a few HTTP requests, and wish to handle //! them synchronously. When [hyper][] releases with asynchronous support, //! `reqwest` will be updated to use it internally, but still provide a //! synchronous Client, for convenience. A `reqwest::async::Client` will also //! be added. //! //! ## Making a GET request //! //! For a single request, you can use the `get` shortcut method. //! //! //! ```no_run //! let resp = reqwest::get("https://www.rust-lang.org").unwrap(); //! assert!(resp.status().is_success()); //! ``` //! //! If you plan to perform multiple requests, it is best to create a [`Client`][client] //! and reuse it, taking advantage of keep-alive connection pooling. //! //! ## Making POST requests (or setting request bodies) //! //! There are several ways you can set the body of a request. The basic one is //! by using the `body()` method of a [`RequestBuilder`][builder]. This lets you set the //! exact raw bytes of what the body should be. It accepts various types, //! including `String`, `Vec<u8>`, and `File`. If you wish to pass a custom //! Reader, you can use the `reqwest::Body::new()` constructor. //! //! ```no_run //! let client = reqwest::Client::new().unwrap(); //! let res = client.post("http://httpbin.org/post") //! .body("the exact body that is sent") //! .send(); //! ``` //! //! ### Forms //! //! It's very common to want to send form data in a request body. This can be //! done with any type that can be serialized into form data. //! //! This can be an array of tuples, or a `HashMap`, or a custom type that //! implements [`Serialize`][serde]. //! //! ```no_run //! // This will POST a body of `foo=bar&baz=quux` //! let params = [("foo", "bar"), ("baz", "quux")]; //! let client = reqwest::Client::new().unwrap(); //! let res = client.post("http://httpbin.org/post") //! .form(¶ms) //! .send(); //! ``` //! //! ### JSON //! //! There is also a `json` method helper on the [`RequestBuilder`][builder] that works in //! a similar fashion the `form` method. It can take any value that can be //! serialized into JSON. //! //! ```no_run //! # use std::collections::HashMap; //! // This will POST a body of `{"lang":"rust","body":"json"}` //! let mut map = HashMap::new(); //! map.insert("lang", "rust"); //! map.insert("body", "json"); //! //! let client = reqwest::Client::new().unwrap(); //! let res = client.post("http://httpbin.org/post") //! .json(&map) //! .send(); //! ``` //! //! [hyper]: http://hyper.rs //! [client]: ./struct.Client.html //! [builder]: ./client/struct.RequestBuilder.html //! [serde]: http://serde.rs extern crate hyper; #[macro_use] extern crate log; extern crate native_tls; extern crate serde; extern crate serde_json; extern crate serde_urlencoded; extern crate url; pub use hyper::client::IntoUrl; pub use hyper::header; pub use hyper::method::Method; pub use hyper::status::StatusCode; pub use hyper::version::HttpVersion; pub use hyper::Url; pub use url::ParseError as UrlError; pub use self::client::{Client, Response, RequestBuilder}; pub use self::error::{Error, Result}; pub use self::body::Body; mod body; mod client; mod error; mod tls; /// Shortcut method to quickly make a `GET` request. pub fn get<T: IntoUrl>(url: T) -> ::Result<Response> { let client = try!(Client::new()); client.get(url).send() }