cURL to Python — cURLコマンドをPythonコードに変換
cURLコマンドをPython requestsまたはhttpxコードに変換します。認証・Cookie・リクエストボディを処理し、ブラウザのみで動作。アップロード不要、制限なし。
cURL to Python
Convert cURL commands to Python requests code. Works entirely in your browser — no uploads.
cURL to Pythonは、あらゆる開発者のツールボックスで最もよく使われているcURL→言語変換です。なぜならPythonのrequestsライブラリがあらゆる言語の中で最も短く読みやすいHTTP呼び出しの方法であり、cURLからrequestsへの変換は機械的に行えるからです。ヘッダーはheaders辞書になり、ボディはdata=またはjson=引数になり、認証はauth=タプルまたはBearerヘッダーになり、Cookieはcookies=辞書になります。出力は5行のスニペットで、30行のBash cURL呼び出しと同じことを、実際のPythonサービスで利用可能なエラーハンドリングとパラメータ化付きで実現します。
cURLからPythonへの変換で自明ではない点は、ライブラリの選択です。デフォルトのrequestsはユースケースの90%にとって正しい選択です — 同期で広く知られ、事実上のPython HTTP標準です。httpxは非同期コード(FastAPIサービス、asyncioスクリプト)とHTTP/2サポートに適しています。urllibはサードパーティパッケージをインストールできず標準ライブラリのみで済ませたい環境向けです。ツールのライブラリトグルで出力が切り替わります。リクエストの形は同じままで、import文と函数呼び出しがそれに合わせて調整されます。ほとんどのユーザーにとってrequestsが正しいデフォルトであり、トグルはそれが最適でない場合のために存在します。
最終的な受け渡しについて:ゴールがスクリプトであれば、出力を.pyファイルに貼り付けてif __name__ == "__main__":のボイラープレートを追加してください。ゴールがサービスであれば、適切なエラーハンドリングとタイムアウト付きで呼び出しを関数でラップしてください。ゴールが非同期コードベースであれば、httpxを選び、asyncオプションを有効にしてください。ゴールが一度限りのデバッグであれば、出力はそのまま使えます — Python REPLやJupyterセルに貼り付けて実行してください。
使い方
cURLコマンドを貼り付ける
ブラウザのDevTools(Networkタブ > Copy as cURL)、ドキュメントページ、またはシェル履歴からcURLコマンドをコピーします。パーサーは`-H`、`-d`、`-X`、`-u`、`--cookie`、`--data-binary`などの一般的なフラグに対応しています。
Python HTTPライブラリを選択する
`requests`(最も普及しており、同期でシンプル)、`httpx`(モダンで非同期対応、`requests`互換のAPI)、または`urllib`(標準ライブラリのみで、依存関係なし)を選べます。出力はimport文、関数呼び出し、レスポンス処理をそれぞれに合わせて調整します。
出力をカスタマイズする
デフォルトの出力は単一の関数呼び出しです。オプションを切り替えてタイムアウト処理、リトライロジック、JSONレスポンスのパースを追加したり、`httpx`のclient変種では呼び出しを`with`ブロックで囲んだりできます。
よくある質問
requestsとhttpxのどちらを選ぶべきですか?
スクリプトやシンプルなサービス、 asyncが必要ない場面ではrequestsが正しい選択です。 httpxは非同期コード(FastAPI、asyncioスクリプト)やHTTP/2サポートが必要なコードに向いています。 APIはほぼ同一で、切り替えは5行の変更で済みます。
Python 2でも動作しますか?
デフォルトの出力はPython 3.6+を対象としています(f-string、型ヒント、モダンな構文を使用)。Python 2.7との互換性が必要な場合は、f-stringを手動で`.format()`呼び出しに書き換えてください。`requests`ライブラリ自体は両バージョンをサポートしていますが、f-stringはサポートしていません。
Cookieと認証はどのように処理されますか?
`-b 'name=value'`は`cookies=`辞書または`Cookie`ヘッダーになります。`-u 'user:pass'`は`auth`パラメータに渡される`requests.auth.HTTPBasicAuth`オブジェクトになります。`-H 'Authorization: Bearer ...'`のBearerトークンは生のヘッダーとしてそのまま保持されます。
非同期コードを生成できますか?
はい — `httpx`を選び、「async」オプションを有効にしてください。出力は`httpx.AsyncClient()`を使い、`async def`と`await`を用います。リクエストの構造は同期版と同じなので、生成されたスニペット内の変更は1行で済みます。
ファイルアップロードやmultipartフォームはどうなりますか?
multipartフォームのアップロード(`-F file=@path`)に対応しています。出力では`requests`の場合は`files={'file': open('path', 'rb')}`、`httpx`の場合は同等の表記が使われます。バイナリアップロードについては、ツールは`--data-binary @file`も`data=open(...)`引数で処理します。
制限事項
- デフォルトではリトライロジックがない生成されたコードは1回だけリクエストを送信し、レスポンスを返します。本番運用では、リトライポリシー付きの`requests.adapters.HTTPAdapter`を追加するか、`tenacity`ライブラリを使って一時的なエラーに指数バックオフを適用してください。
- Sessionの再利用がないデフォルトの出力では呼び出しごとに新しいclientを作成します。同一ホストへの複数リクエストがある場合は、呼び出しを`with requests.Session() as s:`ブロックで囲んでください。スタンドアロンでの呼び出しを好むユーザーもいるため、ツールはSessionを自動で追加しません。
- ストリーミングレスポンスに対応していないデフォルトの出力ではレスポンスボディ全体をメモリに読み込みます。ストリーミングダウンロードには、`response.iter_content()`(requests)または`response.aiter_bytes()`(httpx)を使用してください。ツールは非ストリーミング版を標準パターンとして出力します。
プラットフォーム別の注意点
- macOS
- 出力に含まれるf-string構文にはPython 3.6+が必要です。`requests`と`httpx`ライブラリは`pip install requests httpx`でインストールでき、いずれもmacOS用wheelが同梱されるためコンパイラは不要です。
- Windows
- Python 3.6+が必要です。python.orgの公式.exeまたはMicrosoft Storeからインストールしてください。`requests`と`httpx`ライブラリは`pip install`でインストールでき、プラットフォーム固有のビルド手順はありません。
- Linux
- Python 3.6+が必要です。多くのディストリビューションのデフォルトリポジトリにPython 3.6+が含まれています。`requests`と`httpx`ライブラリは`pip install`でインストールでき、wheelビルドにシステムレベルの依存関係はありません。
- CLI
- このツールを支える同じライブラリがnpm上の`curlconverter`パッケージとしても公開されており、`curlconverter --language python`のCLIモードが用意されています。ビルドスクリプトへの組み込みや、保存したcURLコマンドの一括変換に便利です。
- Web
- 完全にクライアントサイドで動作します。ページの読み込み後はオフラインでも動作します。生成されたPythonは移植性が高く、任意のPythonスクリプト、Jupyter notebook、FastAPIエンドポイントにそのまま貼り付けて追加依存なしに使えます。