# Rust

> Rust の reqwest リクエストで Proxyman に HTTP/HTTPS 通信が表示されるよう、プロキシと証明書の処理を設定します。

## 1. 問題 {#1-problem}

Rust の `reqwest` からの HTTP/HTTPS 通信は、次の理由により Proxyman が自動でキャプチャできません：

* `reqwest` はシステムの HTTP Proxy を参照しないため、Proxyman を経由する通信がありません
* `reqwest` は自己署名の Proxyman 証明書を信頼しないため、SSL エラーが発生します

## 2. 解決方法 {#2-solution}

* `http://localhost:9090` の Proxyman をプロキシとして手動で設定します
* SSL の検証を無効にします

```rust
use anyhow::Result;
use reqwest::Url;

#[tokio::main]
async fn main() -> Result<()> {
    let proxy_url = Url::parse("http://localhost:9090")?;
    let client = reqwest::Client::builder()
        .danger_accept_invalid_certs(true) // trust self-signed certificate
        .proxy(reqwest::Proxy::https(proxy_url)?) // Proxy to Proxyman
        .build()?;
    let response = client.get("https://httpbin.org/get").send().await?;

    if response.status().is_success() {
        let body = response.text().await?;
        println!("Response Text: {}", body);
    } else {
        println!("Request failed with status: {}", response.status());
    }

    Ok(())
}
```

> **備考:** システムのプロキシを無視するアプリの場合は、[Network Extension](https://proxyman.com/docs/ja/advanced-features/network-extension)（ベータ版、macOS 26 以降）も試せます。Network Extension では、アプリごとにプロキシを設定しなくても通信をキャプチャできます。HTTPS の場合、Rust クライアントは引き続き Proxyman 証明書を信頼するか、上記のように検証をスキップする必要があります。
