tokio-curl 0.1.8

An implementation of an asynchronous HTTP client using futures backed by libcurl.

A Future interface on top of libcurl

This crate provides a futures-based interface to the libcurl HTTP library. Building on top of the curl crate on crates.io, this allows using a battle-tested C library for sending HTTP requests in an asynchronous fashion.

Examples

extern crate curl;
extern crate futures;
extern crate tokio_core;
extern crate tokio_curl;

use std::io::{self, Write};

use curl::easy::Easy;
use futures::Future;
use tokio_core::reactor::Core;
use tokio_curl::Session;

fn main() {
    // Create an event loop that we'll run on, as well as an HTTP `Session`
    // which we'll be routing all requests through.
    let mut lp = Core::new().unwrap();
    let session = Session::new(lp.handle());

    // Prepare the HTTP request to be sent.
    let mut req = Easy::new();
    req.get(true).unwrap();
    req.url("https://www.rust-lang.org").unwrap();
    req.write_function(|data| {
        io::stdout().write_all(data).unwrap();
        Ok(data.len())
    }).unwrap();

    // Once we've got our session, issue an HTTP request to download the
    // rust-lang home page
    let request = session.perform(req);

    // Execute the request, and print the response code as well as the error
    // that happened (if any).
    let mut req = lp.run(request).unwrap();
    println!("{:?}", req.response_code());
}

Platform support

This crate works on both Unix and Windows, but note that it will not scale well on Windows. Unfortunately the implementation (seemingly from libcurl) relies on select, which does not scale very far on Windows.