cURL コード変換
cURLコマンドをPython requests・JavaScript fetch・Go net/http・PHP curl・Node.js axiosコードに即座に変換。登録不要、ブラウザ内で処理。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
主な用途
- 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、--request | HTTP メソッド。指定がなければ、データ付きのリクエストは 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-urlencode | name=content、=content、content を URL エンコード(空白は +) |
--json | ボディ、Content-Type: application/json、Accept: application/json、POST。複数あれば & なしで連結 |
-G、--get | データをクエリ文字列に入れ、メソッドは GET |
-F、--form | multipart のボディ:name=value、name=@file(アップロード。;type=、;filename= に対応)、name=<file(ファイルの中身を値にする)。境界付きの Content-Type はライブラリが書く |
-u user:password | Authorization: Basic … ヘッダー(alice:s3cret → Basic YWxpY2U6czNjcmV0) |
--oauth2-bearer、-A、-e、-b name=value | Authorization: Bearer、User-Agent、Referer、Cookie ヘッダー |
-I、--head | HEAD リクエスト |
-L | リダイレクトをたどる。ないときはたどらない |
--url、--url-query | URL とクエリ文字列。スキームのない 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コマンドも完全対応しています。そのまま貼り付けると正しく解析されます。