本文へ移動
Develop Tools
← 使い方ガイドへ戻る

cURLをJavaScriptのfetchに変換する方法|APIリクエストをコード化

API仕様書のcURLをFrontendやNode.jsへ移すときは、fetchのmethod、headers、bodyへ対応させます。Browserで実行する場合は、同じRequestでもCORSとCookieの制約が加わります。

cURLをHTTPリクエスト構造へ解析して各言語コードへ変換する流れ
cURLをHTTPリクエスト構造へ解析して各言語コードへ変換する流れ

cURLをJavaScript fetchへ変換する

cURLを実行せずに解析し、対応する8種類の言語・Libraryから選んでコードを生成できます。Secret Maskと未対応Option警告も確認できます。

cURLコード変換ツールを開く

結論:JavaScript fetchを選びRequest要素を一つずつ比較する

cURLを貼り付けてJavaScript・Node.js fetchを選びます。method、headers、bodyが生成されても、Browserではcredentialsの指定とServerのCORS Response Headerを別途確認します。

URL、Method、Header、Bodyを最初に比較し、その後にAuthentication、Cookie、Redirect、Timeoutと実行環境固有の制約を確認します。

生成コードをそのまま本番へ入れず、解析結果と未対応Optionを確認してTest環境でRequestを比較してください。

cURLとfetchの対応関係を確認する

URLはfetchの第1引数、Method・Header・Bodyはoptionsへ移ります。JSON BodyはContent-Typeと文字列内容を一緒に確認し、Query ParameterとBodyを混同しません。

fetchはProxy、Client Certificate、--resolve、--insecureなどcurl CLIのNetwork制御を直接再現しません。Forbidden HeaderやCookieもBrowserが管理します。

確認対象変換時に見る点変換後の対応
URL・Queryfetch第1引数URL Class等で確認
Method-XとBody Optionoptions.method
Header-HHeadersの制約確認
BodyJSON・Raw・FormContent-Typeと対応

cURLコード変換ツールで処理する手順

  1. 実値のTokenやCookieをPlaceholderへ置き換え、cURLを入力欄へ貼り付けます。
  2. 自動判定、Bash、PowerShell、cmdからCopy元に合うShell形式を選びます。
  3. TargetにJavaScript / Node.js fetchを選び、Secret Maskを有効にして変換します。
  4. 解析結果のMethod、URL、Header、Body Type、警告を元のcURLと比較します。
  5. 生成コードをコピーまたは保存し、Application側の設定、例外処理、Testへ組み込みます。

Browser fetchとして動かす場合は、生成コードとは別にCORS、credentials、Restricted Headerを確認します。

変換後のコードが動かないときの切り分け

cURLが成功してfetchが失敗する場合、Request差とBrowser Security差を分けます。

Network Panelで実際に送信されたMethod、Request Header、Payload、Redirect、ResponseのCORS Headerを比較します。

  • preflight OPTIONSが失敗していないか
  • credentialsが必要なCookie認証か
  • HeaderをBrowserが拒否していないか
  • Bodyを二重にJSON.stringifyしていないか

現行のcURLコード変換ツールで扱える範囲

DevelopToolsはcURL文字列をShellとして実行せず、ブラウザ内でTokenへ分解し、URL、Method、Header、Body、Authentication、Cookie、Redirect、TimeoutなどのRequest情報へ正規化してからコードを生成します。入力内容をAPIへ送信せず、環境変数を展開したり、@fileで指定されたローカルファイルを読み込んだりもしません。

分類現行ツールの対応
入力Shell自動判定、Bash、PowerShell、cmd。単一行と継続行を解析
出力JavaScript・Node.js fetch、TypeScript fetch、Python requests、Java HttpClient、C# HttpClient、PHP cURL、Go net/http、Ruby Net::HTTP
主要Option-X、-H、-d、--data-raw、--data-binary、--data-urlencode、-F、-u、-b、-A、-e、-G、-L、--url、Timeout
安全機能Secret Mask、解析結果Preview、未対応Option警告、Copy、Download、Reset
未対応例Axios、--json、--form-string、Proxy、Client Certificate、--resolve、--upload-file、任意File読込、Network Request実行

変換後に確認する共通チェックリスト

  • 実効Method、URL、Query Parameterが元のRequestと一致している
  • Header名、値、重複Header、Content-Typeが意図どおりである
  • Bodyの文字列、Encoding、改行、Unicode、JSONの構造が保持されている
  • Cookie、Authentication、Redirect、Timeoutが実行環境のAPIへ正しく対応している
  • 未対応Option、File Placeholder、Secret Mask箇所を見落としていない
  • BrowserではCORSとCredentials、Server-sideではProxy、TLS、証明書、Network経路を別途確認した

SecretとShell構文を安全に扱う

Copy as cURLやAPI仕様書のCommandにはAuthorization、Cookie、X-API-Key、Session ID、Internal URL、個人情報を含むBodyが入り得ます。Secret Maskを有効にしても、生成後のHeader、Query、Body、Commentを目視し、公開用の値はTOKENやAPI_KEYなどのPlaceholderへ置き換えます。

入力中の$(command)、Backtick、Semicolon、Pipe、&&などはShell Commandとして実行しません。$API_URLや$TOKENも端末のEnvironment Variableから取得しません。変換結果へ残った変数表現は、利用するApplicationの設定方式へ手動で接続してください。

@secret.jsonや@photo.pngはPathを示す文字列として扱い、ブラウザから端末内のFileへ自動Accessしません。File内容が必要なRequestは、生成コード内のPlaceholderをFile Picker、Stream、Bufferなど利用環境に合う処理へ置き換えます。

生成コードをTicketやChatへ貼る前に、Authorization、Cookie、Query Parameter、Request Bodyの四か所を再確認してください。

公式資料でOptionと実行環境の差を確認する

cURLのOptionはcurl公式man page、BrowserのRequest制約はMDNとFetch Standard、Copy as cURLはChrome DevTools、各言語のAPIはLibrary公式資料を優先します。Converterの出力はRequestの土台であり、利用VersionのAPI仕様とServer側の受入条件まで保証するものではありません。

具体例:JSON POSTをfetchへ変換する

Content-Type: application/jsonとAuthorizationを持つ--data-rawのPOSTを使います。

生成されたfetchのURL、POST、Header、Body文字列を確認し、Browser利用時だけCORSとcredentialsを追加検討します。

  1. 実TokenをTOKENへ置換する
  2. JavaScript fetchへ変換する
  3. 解析結果のBody Typeと生成Bodyを比較する
  4. Test環境でNetwork Panelを確認する

CORSはClient Codeだけで解除できません。API側がOrigin、Method、Header、Credentialsを許可する必要があります。

よくある質問

入力したcURLは実行または外部送信されますか?
されません。cURL文字列をブラウザ内で解析してコードを生成するだけで、入力URLへRequestを送らず、Shell Command、環境変数、ローカルファイルも評価しません。
生成コードは元のcURLと必ず同じ結果になりますか?
保証されません。未対応Option、Libraryの既定値、BrowserのCORS・Credentials、Cookie Store、Redirect、Proxy、TLSなどの実行環境差を確認する必要があります。