cURLパーサー

ブラウザ内で動作し、何もアップロードされません

cURLコマンドを、実際に送られるリクエストとして読み解き、fetch、Python requests、整形したbashに変換します。何も送信されません。

Command

No command yet

Paste a cURL command on the left, for example from your browser's developer tools (Network tab, right-click a request, Copy as cURL). Nothing is sent: the command is only read.
Ready
Ln 1, Col 1

cURLコマンドとは?

cURLはHTTPリクエストを送るためのコマンドラインプログラムで、cURLコマンドは開発者がリクエストを共有するときに最もよく使われる形式です。1行の中に、サーバーが受け取るものがすべて入っています。-X の後のメソッド、URL、各 -H の後のヘッダー、-d の後のボディです。

API開発ではいたるところでcURLコマンドを目にします。APIドキュメントの例はcURLで書かれていますし、ブラウザの開発者ツールではどのネットワークリクエストにも Copy as cURL があり、バグ報告にも問題を正確に再現できるようcURLコマンドが添えられていることがよくあります。

curlは、コマンドに書かれていないリクエストの一部を自動で付け加えます。つまずきやすいのはまさにそこです。-d はGETをPOSTに変え、Content-Type: application/x-www-form-urlencoded を送ります。そのため、JSONのContent-Typeを付けずにJSONのボディを送ると、サーバーにはフォームとして届きます。複数の -d オプションは & でつながれます。-G はデータをクエリ文字列に移し、-u user:password はBasic認証のAuthorizationヘッダーになります。パーサーはこうしたヘッダーを表示し、どのオプションが追加したかを示します。

使い方

  1. 1コマンドを Command パネルに貼り付けるか、Examples から選びます。ChromeやFirefoxからコピーしたコマンドはそのまま使えます。^ でエスケープされたWindowsの Copy as cURL (cmd) や、バッククォートで行を継続するPowerShellのコマンドにも対応しています。
  2. 2Request タブでリクエストを確認します。メソッドとcurlがそれを使う理由、パーツに分解したURL、クエリパラメーター、ヘッダー、ボディ(JSONは値を一切変えずに整形表示)、そしてパーサーが一覧にするものの解釈はしないオプションです。
  3. 3Request タブの上部のメモでは、フォームとして送られるJSONのボディなど、知っておくべき点を指摘します。Show または F8 で、該当するオプションにカーソルを移動します。
  4. 4Code タブを開くと、同じリクエストをJavaScriptのfetch、Python requests、または複数行に整形したbashコマンドとして取得し、コピーできます。
  5. 5Tidy(Shift+Alt+F)は、エディターのコマンドを1行に1オプションのbashに書き換えます。Ctrl+Z で元に戻せます。

トラブルシューティング

シングルクォートが閉じていない、またはダブルクォートが閉じていない
開いたクォートが閉じられていないため、コマンドの残りが1つの引数として読まれています。bashでは '…' の中にシングルクォートを入れられないので、'\'' と書くか $'…' を使ってください。クォートが開いた位置はエディターでマークされます。
URLが見つかりません
すべての引数がオプションかオプションの値として読まれました。URLがあるか、閉じていないクォートの中に入っていないか、また -o や -u などのオプションがURLより前に自分の値を持っているかを確認してください。
ボディはJSONに見えるのに、フォームとして送られる
Content-Typeなしの -d では、curlは application/x-www-form-urlencoded を送ります。-H "Content-Type: application/json" を追加するか、Content-TypeとAcceptの両方を設定する --json を使ってください。
URLに [ ] や { } が含まれている
curlはこれをパターンとして扱い、値ごとにリクエストを送ります。書かれたとおりに送るには -g(--globoff)を追加してください。
これはcurlではなくwgetのコマンドです
パーサーが読めるのはcurlだけです。ブラウザからPowerShellとしてコピーしたコマンドは Invoke-WebRequest を使っています。代わりに Copy as cURL を選んでください。

よくある質問

コマンドはどこかに送信されますか?

いいえ。コマンドはブラウザ内で解析され、リクエストは一切送られません。コピーしたコマンドには本物のトークンやCookieが含まれていることが多いので、これは重要です。コマンドは消去するかタブを閉じるまでこのタブのsession storageに保存されます。Copy link はコマンドをリンクの # の後ろに入れるため(サーバーには送られません)、共有する前に認証情報が含まれていないか確認してください。

パーサーはどのcURLオプションを理解しますか?

リクエストを変えるオプションです。-X、-H、-d とその派生(--data-raw、--data-binary、--data-urlencode)、--json、-F、-G、-I、-T、-u、-b、-A、-e、--oauth2-bearer、-L、-k、-m、--compressed。短いオプションは -sSL のようにまとめたり、-XPOST のように値を直接付けたりできます。その他のオプションは何をするものかと一緒に一覧表示され、不明なオプションも捨てずに一覧に残します。

コマンドに -X がないのに POST と表示されるのはなぜですか?

curlは、ボディ(-d、--json、-F)があって明示的なメソッドがない場合にPOSTを送ります。パーサーも同じルールに従います。-G ではデータをクエリ文字列にしてGETで送り、-I ではHEADを送ります。

-d @body.json のように @ で指定したファイルは読めますか?

いいえ。パーサーはブラウザ内で動くため、パソコン上のファイルは読めません。ファイル名とメモを表示します。ボディを確認するには、ファイルの中身を --data-raw で貼り付けてください。

生成されるコードはどのくらい正確ですか?

メソッド、URL、ヘッダー、ボディは同じで、ボディは再エンコードせずに同じ文字列として送られます。curlのオプションには対応するものがないものもあります。fetchは -k のように証明書のチェックを省略できず、ブラウザではfetchでCookieヘッダーを設定できません。必要な箇所では、生成コードのコメントでそのことを示します。curlはデフォルトでリダイレクトをたどらないため、コマンドに -L がない限り、Pythonのコードには allow_redirects=False が付きます。