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コマンドと含まれるトークンはお使いの端末上でローカルに処理され、アップロードされることはありません。
機能
- #[tokio::main]とreqwest::Clientで構成されたasync fn main()を生成
- curlのメソッドを対応するreqwest::Methodにマッピング(カスタムの動詞にも対応)
- -H/--headerフラグごとにHeaderMapを構築
- 有効なJSONボディには.json(&serde_json::json!(...))を、フォームまたは生データのペイロードには.body(...)を使用
- -u/--userを慣用的な.basic_auth(ユーザー名, Some(パスワード))呼び出しに変換
- JSONボディを整形して、リテラルを読みやすく編集しやすくする
- -kや出力先ファイル指定オプションなど、reqwestに相当するものがないフラグについて警告
- 結果をコピー、またはワンクリックでrequest.rsとしてダウンロード
cURL to Rust の使い方
- curlコマンドをcURLコマンド欄に貼り付けます。
- 出力パネルに生成されたRustのreqwestプログラムを確認します。
- 調整またはスキップされたフラグがないか、警告バナーを確認します。
- コピーをクリックするか、コードを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がシリアライズを代行します。
よくあるエラーとトラブルシューティング
- .json(...)が使われると思っていたのに、出力が.body(...)になる。 — ボディを--jsonで送るか、-H "Content-Type: application/json"を追加してください。そうすればJSONと認識され、.json(...)に切り替わります。
- コンパイル時にserde_jsonまたはtokioクレートが見つからないというエラーになる。 — Cargo.tomlにreqwest(jsonフィーチャー付き)、serde_json、tokio(fullフィーチャー付き)を依存関係として追加してください。生成されたコードはこれらのクレートを前提としています。
- JSONボディがオブジェクトリテラルではなく引用符付きの文字列になってしまう。 — これはボディが有効なJSONでない場合に起こります。JSONを修正するか、文字列のまま.body(...)で送信してください。
- curlコマンドで-uを使っているのに.basic_auth(...)呼び出しが出力されない。 — -uの値が正確にuser:passの形式になっているか確認してください。変換ツールは内部で生成したBasic認証ヘッダーをデコードして、ユーザー名とパスワードを復元しています。
よくある質問
- 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 ツール