network / convert
curl → Fetch API 変換
curlコマンドをFetch API・Axios・Python requestsのコードに変換します。-X/-H/-d/-uオプションに対応。入力はブラウザ内でのみ処理されます。
サンプル:
// 変換ボタンを押すと結果がここに表示されます使い方
01- 左側のテキストエリアにcurlコマンドをペーストしてください
- 出力形式(Fetch API・Axios・Python requests)をタブで選択します
- 「変換」ボタンを押すと右側にコードが生成されます
- 「コピー」ボタンで生成されたコードをクリップボードにコピーできます
- サンプルボタンから代表的なcurlコマンドをワンクリックで入力できます
実装コード
02コアロジックはブラウザ標準APIのみで実装しています。外部ライブラリは不要で、そのままコピーしてご利用いただけます。parseCurl でcurl引数をトークン解析し、 toFetch で各形式に変換します。
function parseCurl(cmd: string): ParsedCurl {
const tokens = tokenize(cmd.replace(/\\\n/g, ' ').trim())
let i = 0
if (tokens[i]?.toLowerCase() === 'curl') i++
let url = '', method = ''
const headers: Record<string, string> = {}
let body: string | null = null
while (i < tokens.length) {
const tok = tokens[i]
if (tok === '-X' || tok === '--request') {
method = tokens[++i] ?? 'GET'; i++
} else if (tok === '-H' || tok === '--header') {
const h = tokens[++i] ?? ''; i++
const idx = h.indexOf(':')
if (idx > 0) headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim()
} else if (tok === '-d' || tok === '--data' || tok === '--data-raw') {
body = tokens[++i] ?? ''; i++
} else if (!tok.startsWith('-')) {
url = tok; i++
} else { i++ }
}
if (!method) method = body ? 'POST' : 'GET'
const ct = headers['Content-Type'] || ''
return { url, method: method.toUpperCase(), headers, body, isJson: ct.includes('json') }
}
function toFetch(parsed: ParsedCurl): string {
const { url, method, headers, body } = parsed
const opts: string[] = []
if (method !== 'GET') opts.push(` method: '${method}'`)
if (Object.keys(headers).length > 0) {
const lines = Object.entries(headers).map(([k, v]) => ` '${k}': '${v}'`)
opts.push(` headers: {\n${lines.join(',\n')}\n }`)
}
if (body !== null) opts.push(` body: ${JSON.stringify(body)}`)
if (opts.length === 0) return `const response = await fetch('${url}');\nconst data = await response.json();`
return `const response = await fetch('${url}', {\n${opts.join(',\n')},\n});\nconst data = await response.json();`
}よくある使用例・注意点
03curlオプションの対応範囲
-X(メソッド指定)、-H(ヘッダー)、-d / --data / --data-raw / --data-binary(リクエストボディ)、--json(JSONボディ+ヘッダー自動付与)、-u(Basic認証)に対応しています。--compressed・-L・-sなどの転送制御オプションは無視されます。
認証情報の扱い
-u user:pass を指定すると Authorization: Basic ヘッダーに自動変換します。Bearer トークンは -H で直接指定してください。変換後のコードに認証情報がそのまま含まれるため、コードをコミットする際はトークンを環境変数に置き換えることを強くお勧めします。
複数行curlコマンド
バックスラッシュ(\\)で改行した複数行のcurlコマンドにも対応しています。ターミナルからそのままコピーして貼り付けることができます。ただし、シェルの変数展開($VAR)はそのままの文字列として扱われます。
変換の制限事項
--form(マルチパートフォーム)、--cert(クライアント証明書)、--proxy などの高度なオプションは現在未対応です。また、Content-Type が application/json の場合のみボディをJSONとして解釈します。フォームデータ(application/x-www-form-urlencoded)はそのまま文字列として出力されます。
関連ツール
04ソースコード
05このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。
GitHub でコードを見る →