\r\n\r\n
linuxcurlコマンドは、ファイルをダウンロードするだけではありません。curlの機能と、wgetの代わりに使うべきタイミングを確認します。
wgetとcurlの相対的な良し悪しを判断するのは難しい場合があります。これらのコマンドは、機能的に重複している部分があります。それぞれ遠隔地からファイルを取り出せるという点では似ているが、そこで終わっている。
wgetはコンテンツやファイルをダウンロードするための優れたツールです。ファイル、ウェブページ、ディレクトリをダウンロードすることができます。ウェブページのリンクをたどり、ウェブサイト全体のコンテンツを再帰的にダウンロードするインテリジェントなルーチンを備えています。他の追随を許さないコマンドラインダウンロードマネージャーです。
Curlは、まったく別のニーズを満たしています。確かに文書を取得することはできますが、ウェブサイトを再帰的にブラウズして取得するコンテンツを見つけることはできません。curlが実際に行うことは、リモートシステムにリクエストを行い、そのレスポンスを取得して表示することで、リモートシステムと対話することです。これらのレスポンスは、Webページのコンテンツやファイルである可能性が高いですが、curlリクエストが投げかけた「質問」の結果として、WebサービスやAPIを通じて提供されるデータも含まれることがあります。
curl は Web サイトに限らず、HTTP、HTTPS、SCP、SFTP、FTP を含む 20 以上のプロトコルをサポートしています。また、Linux の配管の優れた処理のおかげで、curl は他のコマンドやスクリプトとより簡単に統合できます。
curlの作者は、curlとwgetの違いについて説明したページを持っています。
この記事の調査に使用したパソコンでは、fedora 31とmanjaro 18.1.0にcurlが既にインストールされています。ubuntu 18.04 LTSにはcurlをインストールする必要があります。Ubuntuの場合、以下のコマンドを実行してインストールします。
sudo apt-get install curlバージョンオプションは、curlreportのバージョンを表示します。また、サポートするすべてのプロトコルのリストも表示します。
curl --versioncurlにウェブページを指定すると、ウェブページを取得してくれます。
curl https://www.bbc.comしかし、そのデフォルトの動作は、ソースコードとしてターミナルウィンドウにダンプすることです。
注意:curl にファイルが必要であることを伝えなければ、常にターミナルウィンドウにダンプします。取得するファイルがバイナリファイルの場合、結果が予測できない場合があります。バイナリファイル内の一部のバイト値を、シェルが制御文字またはエスケープシーケンスとして解釈しようとする場合があります。
出力をファイルにリダイレクトするようにcurlに指示しましょう:.
curl https://www.bbc.com > bbc.html今回は、取り出した情報を見るのではなく、直接ファイルに送ってくれるのです。表示すべきターミナルウィンドウの出力がないため、curlは一連の進行状況メッセージを出力します。
前の例では、進捗情報がページのソースコードに散らばってしまうので、curlが自動的にそれを抑制するため、このようなことはしませんでした。
この例では、curlは出力がファイルにリダイレクトされていること、および進捗情報を生成しても安全であることを検出します。
提供する情報です。
curlの出力をファイルにリダイレクトしているため、現在はbbc.htmlというファイルがあります。"
ファイルをダブルクリックすると、検索したページを表示するためのデフォルトのブラウザが起動します。
ブラウザのアドレスバーに表示されるアドレスは、遠隔地のウェブサイトではなく、このコンピュータのローカルファイルであることに注意してください。
ファイルを作成するために出力をリダイレクトする必要はないのです。o(出力)オプションでファイルを作成し、curlに伝えることができるのです。ここでは、-oオプションを使用し、作成するファイル名 "bbc.html" を指定しています。
curl -o bbc.html https://www.bbc.comテキストベースのダウンロード情報をシンプルなプログレスバーに置き換えるには、-# (プログレスバー) オプションを使用します。
curl -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はファイルのダウンロードされた部分を調べて、自分自身に使用する正しいオフセットを決定します。
curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.isoダウンロードが再開されました。curlは再開時のオフセットを報告します。
I (head)オプションを付けると、HTTPヘッダーのみを取得することができます。これは、WebサーバーにHTTP HEADコマンドを送信するのと同じです。
curl -I www.twitter.comこのコマンドは情報を取得するだけで、ページやファイルのダウンロードは行いません。
xargsを使用すると、複数のURLを一度にダウンロードすることができます。例えば、記事やチュートリアルを構成する一連のページをダウンロードしたい場合です。
これらのURLをエディタにコピーして、「URL先」- download.txtというファイルに保存します。xargsを使って、テキストファイルの各行の内容をパラメータとして受け取り、それを順番にcurlに供給します。
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#0 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#1 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#2 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#3 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#4 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#5これは、xargs がこれらの URL を一度に一つずつ curl に渡すために必要なコマンドです。
xargs -n 1 curl -O < urls-to-download.txtなお、このコマンドでは、-O(リモートファイル)出力コマンドで、大文字の "O "を使用することに注意してください。このオプションは、curlが取得したファイルをリモートサーバーにファイル名で保存するようにします。
n1オプションは、テキストファイルの各行を1つの引数として扱うようにxargsに指示します。
コマンドを実行すると、複数のダウンロードが開始され、次々と終了していくのがわかります。
チェックインファイルブラウザでは、複数のファイルがダウンロードされ、それぞれリモートサーバー上のファイル名が表示されています。
関連:Linuxでのxargsコマンドの使い方
FTP(ファイル転送プロトコル)サーバーと組み合わせてcurlを使用することは、ユーザー名とパスワードによる認証が必要な場合でも、簡単に行うことができます。curlでユーザー名とパスワードを渡すには、-u(ユーザー)オプションを使用し、ユーザー名、コロン「:」、パスワードを入力します。コロンの前後にスペースを空けてはいけません。
Rebexの無料テスト用FTP *****です。テスト用のFTPサイトには、あらかじめユーザー名として「demo」、パスワードとして「password」が設定されています。この弱いユーザー名とパスワードは、本番環境または「本物の」FTPサーバーで使用しないでください。
curl -u demo:password ftp://test.rebex.netcurlはFTPサーバーを指し、サーバー上に存在するファイルのリストを返します。
このサーバーには、403バイトの「Readme.txt」ファイルしかありません。回収しよう。先ほどと同じコマンドを使用し、ファイル名を付加します。
curl -u demo:password ftp://test.rebex.net/readme.txtファイルが取得され、その内容がターミナルウィンドウに表示されます。
ほとんどの場合、取得したファイルをターミナルウィンドウに表示するよりも、ディスクに保存する方が便利です。再び、-O(リモートファイル)出力コマンドを使用して、リモートサーバー上のファイルと同じ名前でファイルをディスクに保存することができます。
curl -O -u demo:password ftp://test.rebex.net/readme.txtファイルが取り出され、ディスクに保存されます。lsを使って、ファイルの詳細を確認することができます。FTPサーバー上のファイルと同じ名前で、同じ長さの403バイトです。
ls -hl readme.txt関連:LinuxでFTPコマンドを使う方法
リモートサーバーの中には、送信されるリクエストにパラメータを受け付けるものがあります。これらのパラメータは、例えば、返されるデータのフォーマットや、ユーザーが取得したいデータを正確に選択するために使用することができます。ウェブアプリケーションのプログラミングインターフェース(api)と対話するために、curlを使用することがよくあります。
簡単な例として、ipifyのウェブサイトにはAPIがあり、これを照会することで外部IPアドレスを知ることができます。
curl https://api.ipify.orgコマンドにformatパラメータを追加し、値を "json "とすることで、外部IPアドレスを再度要求することができますが、このとき返されるデータはjson形式でエンコードされたものになります。
curl https://api.ipify.org?format=jsonこちらもgoogleapiを使った例です。本の内容を記述したJSONオブジェクトを返します。提供する必要があるパラメータは、書籍の国際標準図書番号(ISBN)です。ほとんどの書籍の裏表紙、通常はバーコードの下に記載されています。ここで使用しているパラメータは、"0131103628 "です。
curl https://www.googleapis.com/books/v1/volumes?q=i**n:0131103628返されるデータは網羅されています。
あるサイトのコンテンツをダウンロードし、そのコンテンツをサイトのツリー構造で再帰的に検索させたい場合は、wgetを使う。
リモートサーバやAPIとやりとりしたり、ファイルやウェブページをダウンロードしたりする場合は、curlを使います。特に、wgetがサポートしていない多くのプロトコルのうちの1つである場合は、そのようにします。