pub struct RequestBuilder<'a> { /* private fields */ }Expand description
Relatively low-level struct for making HTTP requests.
It can work with any stream that implements Read and Write.
By default it does not close the connection after completion of the response.
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::RequestBuilder, tls, uri::Uri, response::StatusCode};
let addr: Uri = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();
assert_eq!(response.status_code(), StatusCode::new(200));Implementations§
Source§impl<'a> RequestBuilder<'a>
impl<'a> RequestBuilder<'a>
Sourcepub fn new(uri: &'a Uri<'a>) -> RequestBuilder<'a>
pub fn new(uri: &'a Uri<'a>) -> RequestBuilder<'a>
Creates new RequestBuilder with default parameters
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::RequestBuilder, tls, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn method<T>(&mut self, method: T) -> &mut Self
pub fn method<T>(&mut self, method: T) -> &mut Self
Sets request method
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::{RequestBuilder, Method}, tls, uri::Uri};
let addr= Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.method(Method::HEAD)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn version<T>(&mut self, version: T) -> &mut Selfwhere
HttpVersion: From<T>,
pub fn version<T>(&mut self, version: T) -> &mut Selfwhere
HttpVersion: From<T>,
Sets HTTP version
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::{RequestBuilder, HttpVersion}, tls, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.version(HttpVersion::Http10)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn headers<T>(&mut self, headers: T) -> &mut Self
pub fn headers<T>(&mut self, headers: T) -> &mut Self
Replaces all it’s headers with headers passed to the function
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::{RequestBuilder, Method}, response::Headers, tls, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let mut headers = Headers::new();
headers.insert("Accept-Charset", "utf-8");
headers.insert("Accept-Language", "en-US");
headers.insert("Host", "rust-lang.org");
headers.insert("Connection", "Close");
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.headers(headers)
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn header<T, U>(&mut self, key: &T, val: &U) -> &mut Self
pub fn header<T, U>(&mut self, key: &T, val: &U) -> &mut Self
Adds new header to existing/default headers
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::{RequestBuilder, Method}, tls, uri::Uri};
let addr: Uri = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn body(&mut self, body: &'a [u8]) -> &mut Self
pub fn body(&mut self, body: &'a [u8]) -> &mut Self
Sets body for request
§Examples
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::{RequestBuilder, Method}, tls, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
const body: &[u8; 27] = b"field1=value1&field2=value2";
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.method(Method::POST)
.body(body)
.header("Content-Length", &body.len())
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn timeout<T>(&mut self, timeout: Option<T>) -> &mut Self
pub fn timeout<T>(&mut self, timeout: Option<T>) -> &mut Self
Sets timeout for entire connection.
§Examples
use std::{net::TcpStream, time::{Duration, Instant}, convert::TryFrom};
use http_req::{request::RequestBuilder, tls, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let timeout = Some(Duration::from_secs(3600));
let response = RequestBuilder::new(&addr)
.timeout(timeout)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn send<T, U>(
&self,
stream: &mut T,
writer: &mut U,
) -> Result<Response, Error>
pub fn send<T, U>( &self, stream: &mut T, writer: &mut U, ) -> Result<Response, Error>
Sends HTTP request in these steps:
- Writes request message to
stream. - Writes response’s body to
writer. - Returns response for this request.
§Examples
HTTP
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::RequestBuilder, uri::Uri};
//This address is automatically redirected to HTTPS, so response code will not ever be 200
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let mut stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let response = RequestBuilder::new(&addr)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();HTTPS
use std::{net::TcpStream, convert::TryFrom};
use http_req::{request::RequestBuilder, tls, uri::Uri};
let addr: Uri = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let stream = TcpStream::connect((addr.host().unwrap(), addr.corr_port())).unwrap();
let mut stream = tls::Config::default()
.connect(addr.host().unwrap_or(""), stream)
.unwrap();
let response = RequestBuilder::new(&addr)
.header("Connection", "Close")
.send(&mut stream, &mut writer)
.unwrap();Sourcepub fn write_msg<T, U>(&self, stream: &mut T, msg: &U) -> Result<(), Error>
pub fn write_msg<T, U>(&self, stream: &mut T, msg: &U) -> Result<(), Error>
Writes message to stream and flushes it
Sourcepub fn read_head<T: Read>(
&self,
stream: &mut T,
deadline: Instant,
) -> Result<(Response, Vec<u8>), Error>
pub fn read_head<T: Read>( &self, stream: &mut T, deadline: Instant, ) -> Result<(Response, Vec<u8>), Error>
Reads head of server’s response
Sourcepub fn build(self) -> Request<'a>
pub fn build(self) -> Request<'a>
Consume self to build a Request instance.
§Examples
use http_req::{request::RequestBuilder, uri::Uri};
let addr = Uri::try_from("https://www.rust-lang.org/learn").unwrap();
let mut writer = Vec::new();
let request = RequestBuilder::new(&addr)
.header("Connection", "Close")
.build();
let response = request.send(&mut writer);Trait Implementations§
Source§impl<'a> Clone for RequestBuilder<'a>
impl<'a> Clone for RequestBuilder<'a>
Source§fn clone(&self) -> RequestBuilder<'a>
fn clone(&self) -> RequestBuilder<'a>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<'a> Debug for RequestBuilder<'a>
impl<'a> Debug for RequestBuilder<'a>
Source§impl<'a> PartialEq for RequestBuilder<'a>
impl<'a> PartialEq for RequestBuilder<'a>
impl<'a> StructuralPartialEq for RequestBuilder<'a>
Auto Trait Implementations§
impl<'a> Freeze for RequestBuilder<'a>
impl<'a> RefUnwindSafe for RequestBuilder<'a>
impl<'a> Send for RequestBuilder<'a>
impl<'a> Sync for RequestBuilder<'a>
impl<'a> Unpin for RequestBuilder<'a>
impl<'a> UnwindSafe for RequestBuilder<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more