curl(「client URL」の略称)は、特定のサーバーのURLを介してデータを転送するためのコマンドラインツールです。curlは非常にアクセスしやすく、コマンドラインインターフェース(CLI)とインターネット接続のみを必要とするため、ルーター、プリンター、自動車、医療機器などで広く使用されています。火星でも使用されています。
多くの開発者にとって、curlはあらゆるOSから直接バックエンドサービスを迅速にテストする優れたツールです。
この記事では、curlの詳細とその使用方法について学びます。
curlの歴史
curlは1996年にブラジル人開発者ラファエル・サグラによって作成・配布されましたが、最初のリリース後すぐにダニエル・ステンバーグがプロジェクトを引き継ぎ、ウェブから為替レートを自動取得する機能を実現するための調整を加えました。
その機能から、curlは当初httpgetという名称でした。サポートプロトコルが増加するとurlgetに改名され、1998年にアップロード機能をサポートするまでに成長した時点で、ついにcurlと命名されました。
その成長はそこで止まりませんでした。長年にわたり、curlは25以上のプロトコルと複数の機能をサポートし、毎月数億のリクエストを処理しています。今日、curlは世界中のボランティアメンバーからなるコミュニティによって維持されているオープンソースプロジェクトです。
curlの機能
curlのコマンドラインツールは、迅速なHTTPリクエストを実行してテストやデバッグ作業を容易にする能力で開発者の間で知られています。コンピュータのターミナルで簡単なコマンドを実行するだけで、curlはGET、POST、または指定されたAPIがサポートするその他のHTTPリクエストを実行できます。
ユーザーが最も頻繁に操作するのはコマンドラインツールですが、実際の処理の大部分は「libcurl」と呼ばれる開発ライブラリが担っています。この巨大なライブラリはほとんどのコードベースをサポートし、リクエストとレスポンスの処理をバックグラウンドで実行するcurlプロジェクトの中核を成しています。
curlの使用方法
curlコマンドラインを使用するには、それらを実行するためのCLI(macOSの場合はMacターミナル、Windowsの場合はコマンドプロンプト、Linuxの場合はBash)と、マシンがコマンドを完了し、結果を表示し、応答がある場合はそれを読み取るためのインターネット接続が必要です。
curl コマンドはすべて、以下のシンプルな構文に従います:
curl [オプション] [URL]
この形式において、[URL] はリクエストを送信するエンドポイントであり、[OPTIONS] は実行する HTTP リクエストの種類を決定するコマンドです。 デフォルトの形式はダッシュに続く文字(例: -d)または、より詳細な形式として二重ダッシュに続く単語(例: --data)です。さらに、-X [METHOD]構文(例: -X POST)を使用してHTTPメソッドを指定できます。
開発者が知っておくべきcurlコマンドをいくつか紹介します。
GETリクエストの送信
最も一般的なHTTPリクエスト形式はGETリクエストです。指定されたアドレスからテキスト、画像、ファイルなどのデータを取得するために最も頻繁に使用されます。curlのGETリクエストコマンドのデフォルト構文はcurl [URL]です。ここではオプションを指定していません。なぜならGETはcurlコマンドに定義された暗黙のデフォルト動作だからです。
サンプルURLhttps://dummyjson.com/products を使用する場合、このエンドポイントへの curl による GET リクエストは次のようになります:
curl https://dummyjson.com/products
このコマンドの結果は以下のような形式になります:

ただし、すべてのGETリクエストがこれほど簡単に行えるわけではありません。パラメータが必要なケースもあり、URL内で指定することも可能ですが、curlの適切な構文を使用する方が容易です。GETリクエストを指定するには-Gを追加し、必要な数のパラメータに対して-d "パラメータ1=値1"を続けて指定します。 構文は次のようになります:curl -G -d "parameter1=value1" -d "parameter2=value2" https://yoururl.com/yourendpoint
以前と同じURLにGETリクエストを送信し、制限数を1に設定する場合は、次のようになります:
curl -G -d "limit=1" https://dummyjson.com/products
curlはこのコマンドを使用して、ベースURLと設定したパラメータを組み合わせて完全なURLhttps://dummyjson.com/products?limit=1を形成し、GETリクエストを送信します。
出力例:

curlは強力ですが、リクエストから受け取った出力をフォーマットしません。Macでは、コマンドラインに| json_pp を追加することでレスポンスを整形できます:

Windowsにはこのようなツールがプリインストールされていないため、jqのようなツールをインストールし、| jqというショートカットを使用して見やすい形式のJSONを取得する必要があります。
また、組み込みのプログラミング言語でcurlリクエストを処理できる点にも留意してください。例えば、PHPを使用したGETリクエストの管理については、こちらのブログで詳細を確認できます。
POSTリクエストの送信
もう1つのよく使われるHTTPメソッドはPOSTで、サーバーにデータを送信・更新します。
curl での POST リクエストの基本構文はcurl -X POST [URL] です。この形式のリクエストはデータ本体なしで POST リクエストを送信するため、データベース内の項目のステータス更新のみを目的とする場合に有用です。例えば、サンプル URLhttps://httpbin.org/anything を使用する場合、以下のコマンドでシンプルな POST リクエストを実行できます:
curl -X POST https://httpbin.org/anything
多くの場合、データをアップロードする必要があります。そのためには、送信するデータ本文の形式を指定してcurlに読み取り方法を指示することから始めます。 ヘッダーは-H 'HEADER: VALUE' コマンドで追加し、リクエスト本文は-d 'VALUE' コマンドで挿入します。完全な構文はcurl -X POST -H 'HEADER: VALUE' -d 'VALUE' [URL] です。
名前と姓を含む JSON ボディを送信したい場合、Content-Type でコンテンツタイプを JSON 形式に定義し、データを単純な JSON で定義できます:
curl -X POST -H "Content-Type: application/json" -d "{
"FirstName": "Joe",
"LastName": "Soap"
}" https://httpbin.org/anything
上記のコマンドの実行結果は次の通りです:

ご覧の通り、dataフィールドにはリクエストで送信したデータの本文が含まれています。
バージョン7.82以降、curlでは--jsonショートカットも導入されました。これにより、JSONボディを含むPOSTリクエストが簡略化され、curl --json '[JSON BODY]' [URL] と実行できます。--jsonショートカットを使用して前述と同じタスクを実行するコマンドは次のようになります:
curl --json '{"FirstName": "Joe", "LastName": "Soap"}' https://httpbin.org/anything
あるいは、長いJSONボディをローカルファイルとして保存したい場合は、curl --json @[ファイル名].txt [URL]構文でアップロードすることも可能です:
curl --json @file-name.txt https://httpbin.org/anything
サーバーへのデータアップロードには複数の方法があります。例えば、異なるフォーマットが必要な場合や、ファイルをウェブにアップロードしたい場合などです。curl での POST リクエストの詳細はこちらをご覧ください。
プロキシ経由での接続
多くの開発者はセキュリティ強化のためにプロキシサーバーを利用します。ファイアウォールと同様に、信頼性の高いプロキシサーバーはユーザーとそのネットワークをインターネット上の潜在的な脅威から保護します。また、プライバシー保護も強化されます。
プロキシサーバーを正しく使用するには、プロキシに関する以下の情報が必要です:
- プロトコル(例:
http://) - ホスト(通常はドットで区切られた4つの数字、例:
71.00.00.00) - ポート番号(通常4桁の数字、例:
0000) - 認証情報(任意): ユーザー名とパスワードの形式
プロキシURLの構文は次の形式に従います:[プロトコル]://[[ユーザー名]:[パスワード]][ホスト]:[ポート]。認証情報で保護されていないプロキシの場合は、[プロトコル]://[ホスト]:[ポート]となります。
プロキシURLを取得したら、curlの-xオプションで設定できます。これはカスタムHTTPリクエストメソッドを指定する-Xとは異なります(curlは大文字小文字を区別します)。覚えやすい場合は、より詳細な--proxyオプションも使用可能です。いずれのコマンドも、プロキシURLと最終的なURLを続けて指定します。
上記の点を考慮すると、プロキシURLを設定するcurlコマンドは以下のような形式になります:
curl --proxy "http://71.00.00.00:0000" https://httpbin.org/ip
返されるレスポンスにはoriginオブジェクトが含まれ、その値はプロキシのホストIPアドレスに対応しているはずです:
{
"origin": "71.00.00.00"
}
これは、ウェブサイトがリクエストをあなたのコンピュータではなくプロキシのIPアドレスから送信されたものと認識していることを意味します。
プロキシでのcurlの使用方法の詳細については、こちらのブログをご覧ください。
ヘッダーの使用
お気づきかもしれませんが、一部のHTTPリクエストではタスクを正しく完了させるために追加情報が必要です。例えば、先ほどのPOSTリクエストではContent-Typeヘッダーを使用して、curlにアップロードしたデータ本文の読み取り方法を指示しました。
ヘッダーは常に-H コマンドで始まり、他にも様々な場面で使用できます。
一般的なヘッダーの一例として、保護されたURLへの認証とアクセスにベアラートークンを指定するAuthorization: Bearer [TOKEN]があります。もう1つのよく使われるヘッダーは、JSONレスポンスの優先度を指定するAccept: application/jsonです。
URLのレスポンスヘッダー一覧を取得したい場合は、ターミナルで次のように-Iオプション付きcurlコマンドを使用できます:
curl -I https://dummyjson.com/products
また、-i オプションを使用すると、ヘッダーと共にリクエストへの応答を表示できます。
curl のヘッダーに関する詳細は、こちらのブログ記事で詳しく説明しています。
出力の保存
データを読み取るだけでは不十分な場合、コンピュータ上のどこかに出力を保存する必要があります。前述のように、curlはテキスト以外の形式で送信されるデータも処理できます。例えば、ファイル全体をダウンロードまたはアップロードできます。
-o オプションを使用すると、保存したいファイルの名前と場所を指定できます。例えば、このページのコンテンツを TXT 形式でデスクトップに保存したい場合は、次のコマンドを使用できます:
curl -o /Users/User/Desktop/file.txt https://brightdata.com/blog
このコマンドを実行し、デスクトップを開くと新しく保存されたファイルを確認できます。
ファイルのアップロード
curl はウェブからのファイルダウンロードと同様に、ファイルのアップロードも可能です。テキスト形式ではなく実際のファイルとしてデータをアップロードすることを curl に認識させるには、ファイル名の前に@ 記号を付ける必要があります。
多くの開発者は、curlでサーバーにファイルをアップロードするには-X POSTフラグだけで十分だと誤解しています。しかし、ファイルアップロードでは通常、ファイルがフォームの一部として添付されるため、multipart/form-dataコンテンツタイプが必要です。したがって、-X POSTフラグに加えて正しいヘッダータイプを設定する必要があります。-F フラグは正しいコンテンツタイプヘッダーを設定し、-X POST フラグは自動的に設定されます。これにより、より短くシンプルなコマンドが実現します。
-F フラグを使用すると、フォームフィールドの値を指定してフォームを送信できます。ファイルをフォームフィールドとして添付するには、ファイル名の前に@ 記号を付けます。
正しい構文はcurl -F "file=@[ファイルパス]/[ファイル名].txt" [URL] です。ここでfile はフォーム内のファイルフィールド名です。例えば、先にダウンロードしたファイルをhttps://example.com/upload のようなダミーURLにアップロードする場合、コマンドは次のようになります:
curl -F "file=@/Users/User/Desktop/file.txt" https://example.com/upload
複数のファイルをアップロードしたい場合は、URLの定義の前に-Fコマンド構文を何度でも繰り返すことができます。
curlの活用例
高い互換性と汎用性により、curl は様々なシナリオで利用できます。
最も一般的な用途は、APIテストの実施、Webサービスとの連携、GETやPOSTなどの各種HTTP操作を実行するHTTPクライアントとしての利用です。多くのプログラミング言語も内部でlibcurlを使用してHTTPリクエストを実行しています。
curl は主に HTTP リクエストの実行とレスポンスの取得に重点を置いていますが、受信したコンテンツのパースや処理のために他のツールやスクリプトと組み合わせることもできます。例えば、ウェブスクレイピングの一環としてウェブページのHTML コンテンツを取得することができます。
curlの利点
curlには多くの利点があります。最も注目すべきは、ほぼすべてのデバイスで使用可能な高い互換性と、習得・習得が容易な構文です。
また、curlは機能が豊富で汎用性が高く、高速かつ特に軽量であるため、CPUに負荷をかけずにタスクを実行できます。
まとめ
本記事では、curlの歴史、動作原理、活用事例、利点について詳しく解説しました。また、curlで実行できる最も基本的なコマンドのいくつかについても紹介しました。
ウェブスクレイピングをより迅速に行う方法にご興味がある方は、Bright Data Web Scraper APIをぜひご確認ください。今すぐ無料トライアルに登録しましょう!