curl to Rust 変換ツール

curlコマンドをブラウザ内で即座にRustのreqwestコードに変換します。コマンドはお使いの端末から外部に送信されません。

curlコマンドはブラウザ内でローカルにRustへ変換され、アップロードされることはありません。ただし、実際の本番用トークンや認証情報をどのツールにも貼り付けないようにしてください。

curlをJavaScriptのfetchにも変換する

cURL to Rust について

cURL to Rustは、ターミナルやブラウザのDevTools、APIドキュメントからコピーしたcurlコマンドを受け取り、reqwestクレートを使った非同期のRustプログラムとして書き直します。-X、-H、-d、--data-raw、--json、-u、-Gといったフラグを読み取り、適切なreqwest::Methodを選び、有効なJSONボディには.json(...)を、フォームや生データのペイロードには.body(...)を選択するため、curlが実際に送信する内容とリクエストが一致します。-u/--userフラグは、生のヘッダーではなく慣用的な.basic_auth(...)呼び出しに変換されます。素早いAPIテストをRustサービスやCLIツール、統合テストに移植する際に、reqwestの定型コードを手書きせずに済むので便利です。変換はすべてブラウザ内で行われるため、curlコマンドと含まれるトークンはお使いの端末上でローカルに処理され、アップロードされることはありません。

機能

cURL to Rust の使い方

  1. curlコマンドをcURLコマンド欄に貼り付けます。
  2. 出力パネルに生成されたRustのreqwestプログラムを確認します。
  3. 調整またはスキップされたフラグがないか、警告バナーを確認します。
  4. コピーをクリックするか、コードをrequest.rsとしてダウンロードします。

入力

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada"}'

出力

use reqwest::header::{HeaderMap, HeaderName, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::new();

    let mut headers = HeaderMap::new();
    headers.insert(HeaderName::from_bytes(b"Content-Type")?, HeaderValue::from_str("application/json")?);

    let response = client
        .request(reqwest::Method::POST, "https://api.example.com/users")
        .headers(headers)
        .json(&serde_json::json!({
            "name": "Ada"
        }))
        .send()
        .await?;

    println!("{}", response.status());
    let body = response.text().await?;
    println!("{}", body);

    Ok(())
}

JSONボディは.json(...)で渡されるため、reqwestがシリアライズを代行します。

よくあるエラーとトラブルシューティング

よくある質問

curlコマンドをRustに変換するにはどうすればいいですか?
curlコマンドを入力欄に貼り付けると、cURL to Rustが右側に非同期のreqwestプログラムを表示します。コピーするか、request.rsとしてダウンロードできます。
cURL to Rustはreqwest向け、それとも別のHTTPクライアント向けのコードを生成しますか?
非同期ランタイムとしてtokioを使う、人気のreqwestクレートを対象としており、#[tokio::main]を使ったasync fn main()を出力します。コードを実行する前に、両方のクレートをCargo.tomlに追加してください。
変換ツールが.body(...)ではなく.json(...)を使うのはどんなときですか?
ボディが有効なJSON(--jsonまたはJSONのContent-Typeで送信)のときは.json(&serde_json::json!(...))を使い、フォームエンコードや生の文字列のボディには.body(...)を使います。
curl -uの基本認証の値はRustの出力でどのように扱われますか?
-uまたは--userの値は、手書きのAuthorizationヘッダーではなく、リクエストビルダー上の.basic_auth(ユーザー名, Some(パスワード))として表現されます。
curlコマンドをRustに変換するとき、内容はどこかにアップロードされますか?
いいえ。curlからRustへの変換はすべてブラウザ内で完結するため、コマンドとそこに含まれる認証情報はお使いの端末に留まります。
生成されたreqwestコードはどのクレートに依存していますか?
出力にはreqwest(jsonフィーチャー付き)、serde_json、tokio(fullフィーチャー付き)が依存関係として必要です。コンパイル前にcargo addで追加してください。

関連ツール

すべての ArrayKit ツール