検証したリクエストをコードに残す

curlをリクエストコードに変換

APIの呼び出し例を、そのままプロジェクトへ持ち込める形に。curlコマンドからPython、JavaScript、PHPのコードを生成し、実行環境による違いも確認できます。

curlリクエストコード
ブラウザー内で変換
01

HTTPリクエストを1つ貼り付けてください。POSIX形式の引用符とバックスラッシュによる行継続に対応しています。

POSTexample.comヘッダー3件
02
async function main() {
  const response = await fetch("https://example.com/api/messages", {
    method: "POST",
    headers: [
      ["Authorization", "Bearer YOUR_TOKEN"],
      ["Content-Type", "application/json"],
      ["Accept", "application/json"]
    ],
    body: "{\"message\":\"Hello from curl\",\"enabled\":true}",
    redirect: "manual",
    credentials: "omit"
  });
  console.log(response.status);
  console.log(await response.text());
}

main().catch(console.error);

ブラウザーのFetchまたはNode.js 18以降

実行前の確認

  • 変換では送信しません。コードには入力URL、ヘッダー、認証情報が含まれるため、共有前に確認してください。
  • ブラウザーのFetchはCORSに従い、credentials: omitではCookieを自動送信しません。認証情報は必要に応じて設定してください。手動リダイレクトは不透明な応答になる場合があります。

登録不要。コマンドは実行せず、入力内容はブラウザー内で処理します。

APIのサンプルを実装に取り込む

ドキュメントにあるcurlの例をプログラムへ移すには、URL、ヘッダー、本文をHTTPクライアントの書式に合わせる必要があります。入力したリクエストを整理してコードにすることで、手作業で引数を移し替える負担を減らせます。ブラウザーの開発者ツールからコピーしたリクエストの再現にも使えます。

実行する場所に合わせて出力を選ぶ

Pythonはrequests.requestを使い、本文をUTF-8のバイト列として渡します。スクリプトでAPIを呼び出す場合に向いています。JavaScriptはFetch、PHPはcURL拡張を利用します。必要なライブラリーや拡張は実行先に用意してください。

出力は1リクエスト分です。アプリケーションのタイムアウトやエラー処理まで自動設計するものではありません。リダイレクト、プロキシ環境、圧縮方式などは実行環境によって異なるため、組み込む前に確認が必要です。

貼り付けてから保存するまで

curlで始まるHTTPまたはHTTPSのコマンドを1つ入力します。引用符と行末のバックスラッシュを残し、出力言語を選んでください。注意点を読んでからコードをコピーするか、ファイルとして保存します。変換するだけではリクエストは送信されません。

対応するのはPOSIX形式です。PowerShell、CMD、ANSI-C形式のドル引用符には対応していません。変数やコマンド置換は実際の値に直してください。ファイルを使う本文、multipart、アップロード、プロキシ指定などは手動での設定が必要です。

ブラウザーで同じ結果にならない場合

FetchはCORSの制約を受けます。Cookieなどブラウザーが管理するヘッダーは自由に設定できないため、省略した項目を明示します。出力のcredentials: omitはCookieを自動送信しません。ログイン済みのブラウザーセッションを複製する機能ではありません。

-LがなければFetchは手動リダイレクトになり、ブラウザーでは不透明なレスポンスになることがあります。リダイレクト先への認証情報の扱いやメソッド変更は、利用するライブラリーで確認してください。

同じ名前のフォーム項目を残す例

2つのtagを別々の値として送りたい場合、辞書に変換すると情報を失う可能性があります。この例ではURLエンコード済みの文字列として本文を保持します。

curl 'https://example.com/api/tags' --data-urlencode 'tag=cloud hosting' --data-urlencode 'tag=linux'
import requests

url = "https://example.com/api/tags"
headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}
body = "tag=cloud%20hosting&tag=linux".encode("utf-8")

response = requests.request(
    method="POST",
    url=url,
    headers=headers,
    data=body,
    allow_redirects=False,
    verify=True,
)
print(response.status_code)
print(response.text)

curlオプションの扱い

入力オプション生成時の扱い
URL / --urlHTTPまたはHTTPSのURLを1つ指定
-X / --request明示したHTTPメソッド
-H / --header名前と値。重複や空のヘッダー指定は要確認
-d / --data / --data-raw / --data-binaryインラインの本文。複数指定の順序を維持
--data-urlencode / -G値をエンコード。-Gでクエリー文字列へ移動
--jsonJSON本文をそのまま保持し、既定のJSONヘッダーを設定
-u / --userusername:passwordによるBasic認証
-L / -I / -kリダイレクト、HEAD、TLS検証。Fetchでは-k不可
-b / -A / -eCookie、User-Agent、Refererにはブラウザー側の制限あり
--compressed / -s / -S / -v / -i展開は実行先のライブラリーで処理。端末の表示形式は再現しない

よくある質問

貼り付けた時点でAPIを呼び出しますか?

呼び出しません。入力はブラウザー内で解析され、コードだけを生成します。実際の通信は生成コードを実行したときに行われます。

開発者ツールのCopy as cURLは使えますか?

bash形式で、対応オプションを使った単一リクエストなら利用できます。未対応の引数は無視せずエラーにするため、意味を確認してから修正してください。

JSONの数値や空白は変わりますか?

JSONをオブジェクトに組み直さず、入力した本文を文字列で保持します。数値表記、空白、重複キーをこの段階で変更しません。--jsonはJSONの構文検証も行いません。

Fetchのヘッダーが少ないのはなぜですか?

ブラウザー管理のヘッダーを除外し、注意点に項目名を表示します。Content-Lengthは転記せずHTTPライブラリーが計算します。必要に応じてPythonやPHPを選んでください。

生成ファイルをそのまま公開しても大丈夫ですか?

入力したトークンやパスワードが含まれる場合があります。共有前に内容を確認し、アプリケーションに必要なタイムアウトや認証情報の管理方法を整えてください。

技術ドキュメント: curl · Requests · Fetch