reqwest_ss_proxy 0.1.1

A hyper 1.x connector for proxying requests through Shadowsocks. / 一个用于 hyper 1.x 的 Shadowsocks 代理连接器。
Documentation

reqwest-ss-proxy

English | 中文


English

A hyper connector and reqwest middleware for proxying requests through a Shadowsocks server.

Features

  • Hyper Connector: Implements tower::Service to act as a connector for hyper 1.x.
  • Reqwest Middleware: Provides a middleware for reqwest to easily proxy requests.
  • Easy to Use: Create a connector or middleware from a Shadowsocks URL.
  • Async: Fully asynchronous with tokio.

Usage

With hyper

use reqwest_ss_proxy::SsConnector;
use hyper_util::client::legacy::Client;
use hyper::body::Buf;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. Create the SsConnector from a Shadowsocks URL.
    let connector = SsConnector::new("ss://aes-256-gcm:password@server:port")? ;

    // 2. Create a hyper client with the connector.
    let client = Client::builder(hyper_util::rt::TokioExecutor::new()).build(connector);

    // 3. Send a request.
    let mut res = client.get("https://ifconfig.me/ip".parse()?).await? ;

    while let Some(chunk) = res.body_mut().data().await {
        println!("IP: {}", String::from_utf8_lossy(&chunk?));
    }

    Ok(())
}

With reqwest

use reqwest_ss_proxy::{SsConnector, reqwest::SsMiddleware};
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. Create the SsConnector.
    let connector = SsConnector::new("ss://aes-256-gcm:password@server:port")? ;

    // 2. Create the SsMiddleware from the connector.
    let ss_middleware = SsMiddleware::new(connector);

    // 3. Build the reqwest client with the middleware.
    let client = reqwest::Client::builder().build()? ;
    let client_with_middleware: ClientWithMiddleware = ClientBuilder::new(client).with(ss_middleware).build();

    // 4. Send the request using the reqwest API.
    let res = client_with_middleware.get("http://ifconfig.me/ip").send().await? ;
    let ip = res.text().await? ;
    println!("IP: {}", ip);

    Ok(())
}

中文

一个用于 hyper 的连接器和 reqwest 的中间件,可通过 Shadowsocks 服务器代理请求。

特性

  • Hyper 连接器: 实现了 tower::Service,可作为 hyper 1.x 的连接器。
  • Reqwest 中间件: 提供了 reqwest 中间件,可轻松代理请求。
  • 易于使用: 从 Shadowsocks URL 创建连接器或中间件。
  • 异步: 基于 tokio 的完全异步实现。

使用

配合 hyper

use reqwest_ss_proxy::SsConnector;
use hyper_util::client::legacy::Client;
use hyper::body::Buf;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. 从 Shadowsocks URL 创建 SsConnector。
    let connector = SsConnector::new("ss://aes-256-gcm:password@server:port")? ;

    // 2. 使用连接器创建 hyper 客户端。
    let client = Client::builder(hyper_util::rt::TokioExecutor::new()).build(connector);

    // 3. 发送请求。
    let mut res = client.get("http://ifconfig.me/ip".parse()?).await? ;

    while let Some(chunk) = res.body_mut().data().await {
        println!("IP: {}", String::from_utf8_lossy(&chunk?));
    }

    Ok(())
}

配合 reqwest

use reqwest_ss_proxy::{SsConnector, reqwest::SsMiddleware};
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. 创建 SsConnector。
    let connector = SsConnector::new("ss://aes-256-gcm:password@server:port")? ;

    // 2. 从连接器创建 SsMiddleware。
    let ss_middleware = SsMiddleware::new(connector);

    // 3. 使用中间件构建 reqwest 客户端。
    let client = reqwest::Client::builder().build()? ;
    let client_with_middleware: ClientWithMiddleware = ClientBuilder::new(client).with(ss_middleware).build();

    // 4. 使用 reqwest API 发送请求。
    let res = client_with_middleware.get("https://ifconfig.me/ip").send().await? ;
    let ip = res.text().await? ;
    println!("IP: {}", ip);

    Ok(())
}

About

This project is an open-source component of i18n.site ⋅ Internationalization Solution.

关于

本项目为 i18n.site ⋅ 国际化解决方案 的开源组件。