跳到正文
本中心目录
代码示例

Rust reqwest 代理接入示例

使用 reqwest Proxy、账密认证、异步客户端和超时完成代理请求。

只只HTTP技术团队维护更新于 2026年7月31日

Rust 异步服务可以使用调用方项目自行锁定的 reqwest 和 Tokio。代理认证通过 Proxy 配置,不写入目标请求头。

前置条件

  • 调用方项目自行安装并锁定 reqwest 与 Tokio。
  • 通过受控环境注入 PROXY_HOSTPROXY_PORTPROXY_USERNAMEPROXY_PASSWORD
  • 为服务设置并发上限和整体请求截止时间。

完整示例

Rust
use reqwest::{Client, Proxy};
use std::{env, error::Error, time::Duration};

/// 通过账密代理异步请求公开出口检测地址。
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let proxy_host = env::var("PROXY_HOST")?;
    let proxy_port = env::var("PROXY_PORT")?;
    let proxy_username = env::var("PROXY_USERNAME")?;
    let proxy_password = env::var("PROXY_PASSWORD")?;
    let proxy = Proxy::all(format!("http://{proxy_host}:{proxy_port}"))?
        .basic_auth(&proxy_username, &proxy_password);
    let client = Client::builder()
        .proxy(proxy)
        .connect_timeout(Duration::from_secs(10))
        .timeout(Duration::from_secs(30))
        .build()?;

    let body = client
        .get("https://<public-test-host>/ip")
        .send()
        .await?
        .error_for_status()?
        .text()
        .await?;
    println!("{body}");
    Ok(())
}

预期结果

  • Proxy::all 将 HTTP 和 HTTPS 目标统一交给当前 HTTP 代理。
  • 客户端复用连接,并分别限制连接阶段和整体请求时间。
  • 成功状态返回代理出口检测正文。

错误处理

  • 407 检查 .basic_auth 的代理账密与当前权益。
  • 连接和请求超时分别用于定位网络建立阶段与目标响应阶段。
  • 只对幂等请求执行带抖动的有限重试。

安全提示

不要使用 Debug 输出 Proxy 或客户端配置。错误上报只携带错误类别、任务标识和脱敏目标主机,不记录代理认证内容。

这篇内容解决了你的问题吗?

反馈只用于改进公开文档,不会提交账号或请求信息。