Linux の
curl
コマンドは、ファイルのダウンロード以外にもさまざまなことができます。
curl
で何ができるのか、また、
wget
の代わりにcurlを使用する必要がある場合について調べてください。
curl と wget : 違いは何ですか?
wget
コマンドと
curl
コマンド
の相対的な長所を特定するのに苦労することがよくあります。これらのコマンドには機能的に重複する部分があります。それぞれリモートの場所からファイルを取得できますが、類似点はそこだけです。
wget
、コンテンツやファイルをダウンロードするための素晴らしいツール
です。ファイル、Web ページ、ディレクトリをダウンロードできます。これには、Web ページ内のリンクをたどり、Web サイト全体にわたってコンテンツを再帰的にダウンロードするためのインテリジェントなルーチンが含まれています。コマンドラインのダウンロードマネージャーとしては最高です。
curl
まったく異なるニーズを
満たします。はい、ファイルを取得できますが、Web サイトを再帰的に移動して取得するコンテンツを探すことはできません。実際に、
curl
が行うことは、リモート システムにリクエストを送信し、その応答を取得して表示することで、リモート システムと対話できるようにすることです。これらの応答は Web ページのコンテンツやファイルである可能性がありますが、curl リクエストによって尋ねられた「質問」の結果として Web サービスまたは API を介して提供されるデータが含まれる場合もあります。
そして、
curl
Web サイトに限定されません。
curl
、HTTP、HTTPS、SCP、SFTP、FTP など 20 を超えるプロトコルをサポートします。そしておそらく、Linux パイプの優れた処理により、
curl
他のコマンドやスクリプトとより簡単に統合できます。
curl
の作者は、
curl
と
wget
の
違いを説明する
Web ページを持っています。
カールのインストール方法
この記事の調査に使用したコンピューターのうち、Fedora 31 と Manjaro 18.1.0 にはすでに
curl
がインストールされていました。
curl
Ubuntu 18.04 LTS にインストールする必要がありました。 Ubuntu では、次のコマンドを実行してインストールします。
sudo apt-get インストールカール
カールバージョン
--version
オプションを指定すると、
curl
レポートのバージョンが作成されます。また、サポートされているすべてのプロトコルもリストされています。
カール --バージョン
Curlを使用してWebページを取得する
Web ページに
curl
を指定すると、Web ページが取得されます。
カール https://www.bbc.com
ただし、デフォルトのアクションは、ソース コードとしてターミナル ウィンドウにダンプすることです。
何かをファイルとして保存するように
curl
指示しない場合、curlは常にそれをターミナルウィンドウにダンプします。取得しているファイルがバイナリ ファイルの場合、結果は予測できない可能性があります。シェルは、バイナリ ファイル内の一部のバイト値を制御文字またはエスケープ シーケンスとして解釈しようとする場合があります。
データをファイルに保存する
出力をファイルにリダイレクトするようにcurlに指示しましょう。
カール https://www.bbc.com > bbc.html
今回は、取得した情報は表示されず、ファイルに直接送信されます。表示する端末ウィンドウ出力がないため、
curl
一連の進行状況情報を出力します。
前の例ではこれを実行しませんでした。進行状況情報が Web ページのソース コード全体に散在するため、
curl
自動的にそれを抑制しました。
この例では、
curl
出力がファイルにリダイレクトされていること、および進行状況情報を安全に生成できることを検出します。
提供される情報は次のとおりです。
- % Total : 取得する合計金額。
- % Received : これまでに取得されたデータの割合と実際の値。
- % Xferd : データがアップロードされている場合の、実際に送信されたパーセント。
- 平均速度 Dload : 平均ダウンロード速度。
- アップロードの平均速度 : アップロードの平均速度。
- 合計時間 : 転送の推定合計所要時間。
- 経過時間 : この転送のこれまでの経過時間。
- 残り時間 : 転送が完了するまでの推定残り時間
- 現在の速度 : この転送の現在の転送速度。
出力を
curl
からファイルにリダイレクトしたため、「bbc.html」というファイルが作成されました。
そのファイルをダブルクリックすると、デフォルトのブラウザが開き、取得した Web ページが表示されます。
ブラウザのアドレス バーのアドレスは、リモート Web サイトではなく、このコンピュータ上のローカル ファイルであることに注意してください。
ファイルを作成するために出力をリダイレクトする必要はありません。
-o
(出力) オプションを使用し、
curl
にファイルを作成するように指示することで、ファイルを作成できます。ここでは
-o
オプションを使用し、作成するファイルの名前「bbc.html」を指定しています。
カール -o bbc.html https://www.bbc.com
進行状況バーを使用してダウンロードを監視する
テキストベースのダウンロード情報を単純な進行状況バーに置き換えるには、
-#
(進行状況バー) オプションを使用します。
カール -x -o bbc.html https://www.bbc.com
中断されたダウンロードの再開
終了または中断されたダウンロードを簡単に再開できます。大きなファイルのダウンロードを開始しましょう。 Ubuntu 18.04 の最新の長期サポート ビルドを使用します。
--output
オプションを使用して、保存先のファイル名「ubuntu180403.iso」を指定します。
curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso
ダウンロードが開始され、完了に向けて進みます。
Ctrl+C
でダウンロードを強制的に中断すると、コマンド プロンプトに戻り、ダウンロードは中止されます。
ダウンロードを再開するには、
-C
(Continue at) オプションを使用します。これにより、
curl
ターゲット ファイル内の指定されたポイントまたはオフセットでダウンロードを再開します。ハイフン
-
オフセットとして使用すると、
curl
ファイルの既にダウンロードされた部分を調べて、それ自体に使用する正しいオフセットを決定します。
カール -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso
ダウンロードが再開されます。
curl
、再起動するオフセットを報告します。
HTTPヘッダーの取得
-I
(head) オプションを使用すると、HTTP ヘッダーのみを取得できます。これは、
HTTP HEAD コマンドを
Web サーバーに送信するのと同じです。
カール - 私 www.twitter.com
このコマンドは情報のみを取得します。 Web ページやファイルはダウンロードされません。
複数の URL をダウンロードする
xargs
を使用すると、複数の
URL を
一度にダウンロードできます。おそらく、単一の記事またはチュートリアルを構成する一連の Web ページをダウンロードしたいと考えます。
これらの URL をエディタにコピーし、「urls-to-download.txt」という名前のファイルに保存します。
xargs
を使用すると、テキスト ファイルの
各行の内容をパラメータとして扱う
ことができ、そのパラメータが順番に
curl
に供給されます。
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5
これは、
xargs
にこれらの URL を一度に 1 つずつ
curl
に渡すために使用する必要があるコマンドです。
xargs -n 1curl -O < urls-to-download.txt
このコマンドは、大文字の「O」を使用する
-O
(リモート ファイル) 出力コマンドを使用することに注意してください。このオプションを指定すると、
curl
取得したファイルをリモート サーバー上のファイルと同じ名前で保存します。
-n 1
オプションは、テキスト ファイルの各行を単一のパラメータとして扱うように
xargs
指示します。
コマンドを実行すると、複数のダウンロードが次々に開始および終了することがわかります。
ファイルブラウザで確認すると、複数のファイルがダウンロードされていることがわかります。それぞれには、リモート サーバー上で付けられていた名前が付けられます。
FTPサーバーからファイルをダウンロードする
ユーザー名とパスワードで認証する必要がある場合でも、
ファイル転送プロトコル
(FTP) サーバーで
curl
を使用するのは簡単です。
curl
でユーザー名とパスワードを渡すには、
-u
(ユーザー) オプションを使用し、ユーザー名、コロン「:」、およびパスワードを入力します。コロンの前後にスペースを入れないでください。
これは、 Rebex がホストする無料のテスト用 FTP サーバーです。テスト FTP サイトのユーザー名は「demo」、パスワードは「password」にあらかじめ設定されています。この種の弱いユーザー名とパスワードを運用サーバーまたは「実際の」FTP サーバーでは使用しないでください。
カール -u デモ:パスワード ftp://test.rebex.net
curl
、FTP サーバーを指していることを認識し、サーバー上に存在するファイルのリストを返します。
このサーバー上の唯一のファイルは、長さ 403 バイトの「readme.txt」ファイルです。取り戻しましょう。先ほどと同じコマンドを使用し、ファイル名を追加します。
カール -u デモ:パスワード ftp://test.rebex.net/readme.txt
ファイルが取得され、
curl
その内容を端末ウィンドウに表示します。
ほとんどの場合、取得したファイルはターミナル ウィンドウに表示するよりもディスクに保存した方が便利です。もう一度、
-O
(リモート ファイル) 出力コマンドを使用すると、リモート サーバー上にあるのと同じファイル名でファイルをディスクに保存できます。
カール -O -u デモ:パスワード ftp://test.rebex.net/readme.txt
ファイルが取得され、ディスクに保存されます。
ls
を使用してファイルの詳細を確認できます。このファイルは FTP サーバー上のファイルと同じ名前を持ち、長さは同じ 403 バイトです。
ls -hl readme.txt
パラメータをリモートサーバーに送信する
一部のリモート サーバーは、送信されるリクエスト内のパラメーターを受け入れます。パラメーターは、たとえば返されたデータをフォーマットするために使用される場合もあれば、ユーザーが取得したい正確なデータを選択するために使用される場合もあります。多くの場合、
curl
使用して Web
アプリケーション プログラミング インターフェイス
(API) と対話することが可能です。
簡単な例として、 ipify Web サイトには、外部 IP アドレスを確認するためにクエリを実行できる API があります。
カール https://api.ipify.org
コマンドに
format
パラメーターを追加し、値「json」を使用して外部 IP アドレスを再度リクエストできます。ただし、今回返されるデータは
JSON 形式
でエンコードされます。
カール https://api.ipify.org?format=json
Google API を使用する別の例を次に示します。本を説明する JSON オブジェクトを返します。指定する必要があるパラメータは、書籍の 国際標準書籍番号 (ISBN) 番号です。これらはほとんどの本の裏表紙、通常はバーコードの下にあります。ここで使用するパラメータは「0131103628」です。
カール https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628
返されるデータは包括的です。
時にはカール、時にはwget
Web サイトからコンテンツをダウンロードし、Web サイトのツリー構造でそのコンテンツを再帰的に検索したい場合は、
wget
を使用します。
リモート サーバーまたは API と対話し、場合によってはファイルまたは Web ページをダウンロードしたい場合は、
curl
使用します。特に、そのプロトコルが
wget
でサポートされていないプロトコルの 1 つである場合はそうです。





