照合されたcurlメモをダウンロードします。グラフィカル・インターフェースを使わずにインターネットから必要な情報を得るには、curlが高速で効率的な方法です。
curlは、インターネットから情報を取得し、ターミナルに表示したり、ファイルに保存したりすることができます。表面的には、Firefox や Chromium がデフォルトで情報を取得するのに対して、curl は生の情報をダウンロードして表示することを除けば、これは Web ブラウザに似ています。実際には、curl コマンドはもっと多くのことができ、HTTP、、、、TP などのさまざまなプロトコルを使用してサーバーに双方向でデータを転送できます。これは一般的なエンドユーザーにとっては便利なツールであり、システム管理者にとっては非常に便利であり、マイクロサービスやクラウド開発者にとっては品質保証ツールです。
curlはユーザーとのインタラクションなしに動作するように設計されているため、Firefoxとは異なり、最初から最後までオンラインデータとのインタラクションを考える必要があります。例えば、Firefoxでウェブページを表示するには、Firefoxのウィンドウを起動する必要があります。Firefoxを開いた状態で、アクセスしたいウェブサイトをアドレスバーまたは検索エンジンに入力します。次に、サイトに移動し、表示したいページをクリックします。
アクセスしたいインターネット・アドレスを指定してcurlを起動し、データをターミナルに保存するかファイルに保存するかを指定します。認証が必要なウェブサイトやAPIとやりとりするときは少し複雑になりますが、curlコマンドの構文を覚えれば自然にできるようになります。コツをつかむために、関連する構文情報を便利なメモまとめました。
$ curl "http://.om" | tail -n 4<h1>Example Domain</h1><p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p><p><a href="https://..//le"&; information...</a></p></div></body></html>
URLの中にはシェルが通常解釈する特殊文字が含まれているものがあるので、URLを引用符で囲むのが最も安全です。
ファイルによっては、ターミナルでの表示にうまく変換されないものもあります。 --remote-name 使用すると、サーバー上の命名に従ってファイルを保存することができます:
$ curl --remote-name "https://./-.so"linux-distro.iso
または、 --output オプションを使用して、ダウンロードするコンテンツに名前を付けることもできます:
curl "http://./.ml" --output bar.html
curl を使ってリモート・ディレクトリのコンテンツを一覧表示します。
curlはインタラクティブではないので、ページ上のダウンロード可能な要素をナビゲートするのは困難です。接続先のリモートサーバが許可している場合は、curl を使ってディレクトリの内容を一覧表示することができます:
$ curl --list-only "https://./oo/"
中断されたダウンロードを続行
非常に大きなファイルをダウンロードしている場合、ダウンロードを中断しなければならないことがあります。curlは賢いので、ダウンロードが中断された場所を判断し、ダウンロードを続行します。つまり、次に4GBのLinuxディストリビューションのISOをダウンロードするときに問題が発生しても、最初からやり直す必要はありません。continue-atの構文は少し変わっています。ダウンロードが中断されたバイト数を知っている場合は、それをcurlに提供することができますが、そうでない場合は、別のダッシュを使用して自動的に検出するようにcurlに指示することができます:
$ curl --remote-name --continue-at - "https://./-.so"
1つの大きなファイルではなく、複数のファイルをダウンロードする必要がある場合は、curlが役立ちます。ダウンロードしたいファイルの場所とファイル名のパターンがわかっていれば、curlのシーケンスタグを使うことができます。出力ファイル名には、最初の変数に #1 を使います:
$ curl "https://./le_[-4].bp" --output "file_#1.webp"
他の変数を使用して別のシーケンスを表す必要がある場合は、各変数をコマンドに表示される順序で表します。例えば、このコマンドでは、#1はimages_000からimages_900までのディレクトリを指し、#2はfile_1.webpからfile_4.webpまでのディレクトリを指します:
$ curl "https://./_[-9]/le_[-4].bp" --output "file_#1-#2.webp"
サイトからすべてのPNGファイルをダウンロード
また、ダウンロードしたいものを見つけるために、curlとgrepだけを使って基本的なウェブクローリングをすることもできます。例えば、アーカイブされているページに関連するイメージをすべてダウンロードする必要があるとします。まず、イメージを参照しているページをダウンロードします。そのページの内容を grep にパイプし、目的のイメージタイプを検索します。最後に、whileループを作成してダウンロードURLを作成し、ファイルをコンピュータに保存します:
$ curl https://.om |\grep --only-matching 'src="[^"]*.[png]"' |\cut -d" -f2 |\while read i; do \curl https://.om/"${i}" -o "${i##*/}"; \
これはほんの一例ですが、Unixのパイプラインや基本的な、しかし巧妙な解析と組み合わせて使うことで、curlがいかに柔軟なものになるかを示しています。
HTMLヘッダーの取得
データ交換に使用されるプロトコルは、コンピュータが通信のために送信するパケットに大量のメタデータを埋め込みます。HTTPヘッダーは、データの初期部分のコンポーネントです。ウェブサイトへの接続に問題がある場合、これらのヘッダーを見ることは役に立ちます:
curl --head "https://.om"HTTP/ 002accept-ranges: bytescache-control: max-age=content-type: text/html; charset=UTF-8date: Sun, 26 Apr :09 GMTetag: ""expires: Sun, 03 May :09 GMTlast-modified: Thu, 17 Oct :26 GMTserver: ECS (sjc/4E76)x-cache: HITcontent-length: 5216
速く失敗する
200のレスポンスは通常HTTPの成功表示で、サーバーに接続する際に通常期待されるものです。有名な404レスポンスはページが見つからなかったことを意味し、500はサーバーがリクエスト処理にエラーを起こしたことを意味します。
ネゴシエーション中に発生したエラーを確認するには、 --show-error オプションを追加します:
$ curl --head --show-error "http://.ga"
接続したいサーバーにアクセスできない限り、これらの問題を解決するのは困難ですが、curlは通常、指定したアドレスに接続しようと最善を尽くします。ネットワーク上でテストする場合、延々とリトライを繰り返すのは時間の無駄に思えることがあるので、-fail-earlyオプションを使用すると、curlが失敗した場合に強制的に素早く終了させることができます:
curl --fail-early "http://.ga"
指定されたリダイレクトクエリへの3xxによる応答
300 この一連のレスポンスはより柔軟です。具体的には、301 レスポンスは URL が永久に別の場所に移動したことを意味します。ウェブマスターがコンテンツをリダイレクトして「痕跡」を残すのはよくあることで、古いアドレスを訪れた人がまだそのコンテンツを見つけられるようにするためです。デフォルトでは、curl は 301 リダイレクトを行いませんが、-localtion オプションを使用することで、301 レスポンスが指す先にリダイレクトさせることができます:
$ curl "https://.rg" | grep title<title>301 Moved Permanently</title>$ curl --location "https://.rg"<title>Internet Assigned Numbers Authority</title>
短いURLを展開
locationオプションは、アクセスする前に短いURLを表示したい場合に便利です。短いURLは、文字数制限のあるソーシャルネットワークや、ユーザーが長いアドレスをコピー&ペーストできないような印刷媒体に便利です。しかし、宛先アドレスが本質的に隠されているため、危険でもあります。HTTPヘッダーのみを表示する--headオプションと、URLの最終アドレスを表示する--locationオプションを組み合わせることで、完全なリソースを読み込むことなく短いURLを表示することができます:
$ curl --head --location "<https://./>"
カールメモのダウンロード
ウェブを一つのコマンドとして探索することを考え始めると、curl はグラフィカル・インターフェースを気にすることなくインターネットから必要な情報を取得するための高速で効率的な方法となります。ワークフローに慣れるために、curlを使ったAPIクエリの概要など、一般的なcurlの使い方や構文をまとめた 作成されています。




