[−][src]Crate aahc
Agnostic Asynchronous HTTP Client
This crate is an HTTP/1.1 client library that does no dynamic memory allocation, is not tied to any specific specific asynchronous executor or executors, and does not spawn additional threads.
The only requirement to use aahc
is that the application provides a socket connected to the
HTTP server, which must implement AsyncBufRead
and
AsyncWrite
. This allows aahc
to be used in any asynchronous
executor/reactor environment which provides TCP sockets.
Example
let mut runtime = tokio::runtime::Builder::new() .basic_scheduler() .enable_io() .build() .unwrap(); runtime.block_on(async { use async_compat::CompatExt as _; // Connect to the server. let mut socket = tokio::net::TcpStream::connect("example.com:80").await.unwrap(); // Split the socket into read and write halves and buffer the read half. let (mut read_socket, mut write_socket) = socket.split(); let mut read_socket = tokio::io::BufReader::new(read_socket); // Make the sockets into Futures-compatible objects. let mut read_socket = read_socket.compat(); let mut write_socket = write_socket.compat(); // Send the request headers. let request_headers = [ aahc::Header{name: "user-agent", value: b"aahc"}, aahc::Header{name: "host", value: b"example.com"}, ]; let mut send_body = aahc::send_headers( "GET", "/", &request_headers, std::pin::Pin::new(&mut write_socket), ).await.unwrap(); // There is no body for a GET request, so finish it immediately. let metadata = send_body.finish().await.unwrap(); // Receive the response headers. let mut response_headers_buffer = [0u8; 1024]; let mut response_headers_storage = [aahc::Header{name: "", value: b""}; 128]; let (response_headers, mut receive_body) = aahc::receive_headers( std::pin::Pin::new(&mut read_socket), &mut response_headers_buffer, &mut response_headers_storage, metadata, ).await.unwrap(); assert_eq!(response_headers.minor_version, 1); assert_eq!(response_headers.status, 200); // Receive the response body. let mut response_body = vec![]; tokio::io::copy( &mut receive_body.compat(), &mut response_body, ).await.unwrap(); })
Modules
error | Errors that originate inside |
Structs
Header | Represents a parsed header. |
Metadata | Metadata about a request. |
ReceiveBody | An in-progress HTTP response which is currently receiving a response body. |
Response | An HTTP status line and response headers. |
SendBody | An in-progress HTTP request which is currently sending a request body. |
Functions
receive_headers | Receives an HTTP status line and response headers. |
send_headers | Sends an HTTP request line and request headers. |