cURL コード変換

cURLコマンドをPython requests・JavaScript fetch・Go net/http・PHP curl・Node.js axiosコードに即座に変換。登録不要、ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
現在のコマンドを変換します。コード先頭の未変換オプションを確認してください。Ctrl/⌘+Enter でも変換できます。コマンドの編集だけでは変換しません。
Content-Type と Authorization ヘッダーを含む JSON POST のサンプルで入力を置き換え、選択中の言語に変換します。
コマンド、生成コード、ステータスを消去し、選択中の言語は保持します。ツール内の Ctrl/⌘+L でも消去できます。
出力言語 Python、JavaScript、Go、PHP、Node.js を選択します。タブは直前に変換したコマンドのコードを生成します。コマンドの編集後は変換をクリックして反映します。
cURL コマンドを入力します。バックスラッシュによる行継続と DevTools の Copy as cURL (bash) の引用符に対応します。リクエストを送信せず、コードだけを生成します。
生成コード
選択中の言語で表示されているコード全文をコピーします。空の出力はコピーしません。プロジェクトで実行する前に、生成されたリクエストを確認してください。

cURL コマンドを入力するかサンプルを読み込み、コードに変換します。

例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

主な用途

  • API連携:ドキュメントのcURL例を任意の言語に変換。
  • デバッグ:DevToolsでコピーしたcURLを即座にコードに変換してテスト。
  • チーム共有:cURLに不慣れなメンバーにリクエスト内容を説明。
  • 開発効率化:ボイラープレートを手書きせずHTTPリクエストを素早く実装。

例:JSON の POST リクエスト

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer TOKEN" \
  -d '{"name": "Alice", "email": "alice@example.com"}'

Python の出力:

import requests

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer TOKEN",
}

data = "{\"name\": \"Alice\", \"email\": \"alice@example.com\"}"

response = requests.post(
    "https://api.example.com/users",
    headers=headers,
    data=data,
    allow_redirects=False,
)
print(response.text)

Go の出力:

package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader("{\"name\": \"Alice\", \"email\": \"alice@example.com\"}")
	req, err := http.NewRequest("POST", "https://api.example.com/users", body)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("Authorization", "Bearer TOKEN")

	client := &http.Client{
		CheckRedirect: func(req *http.Request, via []*http.Request) error {
			return http.ErrUseLastResponse
		},
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(respBody))
}

ボディは入力した文字列そのままなので、サーバーが受け取るバイト列は curl と同じです。allow_redirects=False と http.ErrUseLastResponse があるのは、curl は -L がないとリダイレクトをたどらず、requests と Go の http.Client は既定でたどるためです。Go のコードはエラーを捨てず、どのエラーでも log.Fatal で止まります。

コードの確認方法

ツールのテストでは、各サンプルコマンドをローカルの HTTP サーバーに 2 回送ります。1 回は本物の curl、もう 1 回は生成した Python、Go、JavaScript のコードです。サーバーはメソッド、パスとクエリ、ヘッダー、ボディを比べます。multipart のボディは境界文字列がランダムなので、パートごとに比べます。Node.js の出力は node --check で ES モジュールとして確認します。サンプルは複数の -d、-G、--json、--data-urlencode、-F のファイルアップロード、-d @file、Basic 認証、HEAD、-L の有無によるリダイレクト、Chrome が書く $'...' の引用符を含みます。

オプションの変換方法

規則は curl のマニュアルに従います:

curl生成コード
-X、--requestHTTP メソッド。指定がなければ、データ付きのリクエストは POST
-H、--headerヘッダー(名前と値はそのまま)。Name; は空の値を送る
-d、--data、--data-ascii、--data-raw、--data-binaryボディ。複数あれば & でつなぐ。Content-Type ヘッダーがなければ curl と同じく Content-Type: application/x-www-form-urlencoded を付ける
-d @file、--data-binary @fileコードがファイルを読む。-d は curl と同じく CR と LF を取り除く
--data-urlencodename=content、=content、content を URL エンコード(空白は +)
--jsonボディ、Content-Type: application/json、Accept: application/json、POST。複数あれば & なしで連結
-G、--getデータをクエリ文字列に入れ、メソッドは GET
-F、--formmultipart のボディ:name=value、name=@file(アップロード。;type=、;filename= に対応)、name=<file(ファイルの中身を値にする)。境界付きの Content-Type はライブラリが書く
-u user:passwordAuthorization: Basic … ヘッダー(alice:s3cret → Basic YWxpY2U6czNjcmV0)
--oauth2-bearer、-A、-e、-b name=valueAuthorization: Bearer、User-Agent、Referer、Cookie ヘッダー
-I、--headHEAD リクエスト
-Lリダイレクトをたどる。ないときはたどらない
--url、--url-queryURL とクエリ文字列。スキームのない URL には curl と同じく http:// を付ける
-s、-S、-v、-i、-o、-w、--compressed省く(curl の表示や保存だけを変えるため)
その他のオプションと -kコード先頭のコメントとステータス欄に表示。-k があってもコードは TLS の検証を続ける

オプションはまとめ書き(-sSL)や値の直結(-XPUT、-H'X: 1')もできます。curl 8.7 にないオプションはエラーになり、URL として読まれることはありません。

実行前に確認すること

  • JavaScript(fetch) はページ内で動くため、ローカルのパスを開けません。アップロードするファイルと @file のボディは <input type="file"> から取り、コメントに書いた順に選びます。fetch はリダイレクトもたどり、Cookie や Host などの禁止ヘッダーはブラウザが取り除きます。
  • JavaScript タブの name=<file のテキストは改行が CRLF で送られます。FormData は HTML のフォームエンコード規則に従ってテキスト値の改行をそろえるためです。Python、Go、PHP、Node.js はファイルの中身をそのまま送ります。
  • Node.js は axios を使い、4xx・5xx の応答で例外を投げます(curl は投げません)。maxRedirects: 0 は -L なしの curl に合わせたもので、3xx の応答でも例外になります。ファイルのアップロードは fs.openAsBlob を使うため Node.js 19.8 以降が必要です。
  • PHP では同じ名前の -F フィールドが 1 つしか送られません。PHP の配列はキーごとに値を 1 つしか持たないためです。
  • $VAR、$(...)、パイプなどのシェル構文は展開しません。"$TOKEN" は文字どおり $TOKEN になります。

ブラウザからリクエストをコピーする

Chrome や Edge の DevTools で Network パネルを開き、リクエストを右クリックして Copy → Copy as cURL (bash) を選びます。値に引用符や改行があるとき、この形式は $'...' の引用符を使い、変換ツールはそれを読み取れます。Windows でも bash 版を選んでください(cmd 版は ^ でエスケープし、このツールは読み取りません)。こうしてコピーしたリクエストには Cookie やトークンが含まれがちですが、このページはアクセス解析も広告も読み込まず、変換はブラウザ内で行います。

FAQ

対応しているcURLフラグは?

curl 8.7 のすべてのオプションを読み取ります。変換するのは -X、-H、-d / --data / --data-raw / --data-binary / --data-ascii / --data-urlencode、--json、-G、-F / --form-string(ファイルアップロードを含む)、-u、--oauth2-bearer、-A、-e、-b、-I、-L、--url、--url-query です。curl の出力だけを変えるオプション(-s、-v、-o、-i、--compressed)は省き、それ以外はコード先頭のコメントに書き出します。

cURLコマンドはサーバーに送信されますか?

いいえ。すべての解析とコード生成はJavaScriptによりブラウザ内で完結します。コマンドや認証情報がデバイス外に出ることはありません。

生成コードにawaitが使われる理由は?

JavaScript(fetch)のコードはブラウザのコンソールと ES モジュールで動きます。Node.js のコードは ES モジュール(import axios from 'axios')で、トップレベル await が使えます。.mjs ファイルにするか、package.json に "type": "module" を書いたプロジェクトに置いてください。

Basic認証はどう処理されますか?

-u user:password は Authorization: Basic ヘッダーになり、値は user:password の UTF-8 バイト列を Base64 にしたもので、curl が送る値と同じです。コロンがないと curl はパスワードを尋ねるため、-u user は変換していないオプションとして表示します。

複数行のcURLコマンドは使えますか?

バックスラッシュで改行した複数行のcURLコマンドも完全対応しています。そのまま貼り付けると正しく解析されます。