Giter Site home page Giter Site logo

chrootable-https's Introduction

chrootable-https Build Status crates.io docs.rs

If you ever tried chrooting an https client into an empty folder you probably ran into two problems:

  • /etc/resolv.conf doesn't exist in an empty folder
  • ca-certificates doesn't exist in an empty folder

This crate is working around those issues by using:

  • trust-dns so the recursor can be specified expliticly
  • rustls and webpki-roots to avoid loading certificates from disk

We're also trying to avoid C dependencies and stick to safe rust as much as possible.

Examples

extern crate chrootable_https;
use chrootable_https::{Resolver, Client};

let resolver = Resolver::cloudflare();
let client = Client::new(resolver);

let reply = client.get("https://httpbin.org/anything").expect("request failed");
println!("{:#?}", reply);

License

LGPL-3+

chrootable-https's People

Contributors

ebkalderon avatar kpcyrd avatar mubelotix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

chrootable-https's Issues

Request timeout

There should be a way to timeout requests that take too long.

Client panics if resolver returns ipv6 addresses

There are multiple issues here:

  • the connector configures the destination in an incorrect way if the resolver returned an ipv6 address
  • the connector uses .expect which causes a panic
  • the resolver may use the ipv6 record even if only ipv4 is available

Enable keepalive

We currently have to disable keepalive because the request hangs forever if we enable it.

This needs some investigation if we are using hyper incorrectly or if this is a bug.

Return async responses

It would be nice if Client::get() and other request methods returned a ResponseFuture for use with async runtimes, like the current hyper::Client does for tokio. This would be great for easily managing multiple concurrent downloads and measuring the progress of individual streams. This crate already depends on tokio, so I imagine it would be technically trivial to expose the asynchronous interface underneath somehow.

udp socket leak

As mentioned in #15 there's currently a udp socket leak.

This is difficult to resolve due to trust-dns/hyper/tokio limitations.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.