\r\n\r\n

Linuxのコマンドラインからcurlを使ってファイルをダウンロードする方法

linuxcurlコマンドは、ファイルをダウンロードするだけではありません。curlの機能、およびwgetの代わりにcurlを使うべき場合について説明します...

linuxcurlコマンドは、ファイルをダウンロードするだけではありません。curlの機能と、wgetの代わりに使うべきタイミングを確認します。

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 --version

ウェブ検索

curlにウェブページを指定すると、ウェブページを取得してくれます。

curl https://www.bbc.com

しかし、そのデフォルトの動作は、ソースコードとしてターミナルウィンドウにダンプすることです。

注意:curl にファイルが必要であることを伝えなければ、常にターミナルウィンドウにダンプします。取得するファイルがバイナリファイルの場合、結果が予測できない場合があります。バイナリファイル内の一部のバイト値を、シェルが制御文字またはエスケープシーケンスとして解釈しようとする場合があります。

データをファイルに保存する

出力をファイルにリダイレクトするようにcurlに指示しましょう:.

curl https://www.bbc.com > bbc.html

今回は、取り出した情報を見るのではなく、直接ファイルに送ってくれるのです。表示すべきターミナルウィンドウの出力がないため、curlは一連の進行状況メッセージを出力します。

前の例では、進捗情報がページのソースコードに散らばってしまうので、curlが自動的にそれを抑制するため、このようなことはしませんでした。

この例では、curlは出力がファイルにリダイレクトされていること、および進捗情報を生成しても安全であることを検出します。

提供する情報です。

  • % Total:取得する総量。
  • % Received:これまでに取得したデータの割合と実測値。
  • Xferd: データがアップロードされている場合、実際に送信されたパーセンテージ。
  • 平均 ****:平均 ****。
  • 平均アップロード速度: 平均アップロード速度です。
  • 合計時間:送信にかかると予想される合計時間。
  • 使用時間:このトランスミッションにこれまでに費やした時間。
  • 残り時間:送信完了までの推定残り時間
  • Current speed:この伝送の現在の伝送速度。

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は再開時のオフセットを報告します。

httpヘッダを取得する

I (head)オプションを付けると、HTTPヘッダーのみを取得することができます。これは、WebサーバーにHTTP HEADコマンドを送信するのと同じです。

curl -I www.twitter.com

このコマンドは情報を取得するだけで、ページやファイルのダウンロードは行いません。

複数URLのダウンロード

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サーバーからファイルをダウンロードする

FTP(ファイル転送プロトコル)サーバーと組み合わせてcurlを使用することは、ユーザー名とパスワードによる認証が必要な場合でも、簡単に行うことができます。curlでユーザー名とパスワードを渡すには、-u(ユーザー)オプションを使用し、ユーザー名、コロン「:」、パスワードを入力します。コロンの前後にスペースを空けてはいけません。

Rebexの無料テスト用FTP *****です。テスト用のFTPサイトには、あらかじめユーザー名として「demo」、パスワードとして「password」が設定されています。この弱いユーザー名とパスワードは、本番環境または「本物の」FTPサーバーで使用しないでください。

curl -u demo:password ftp://test.rebex.net

curlは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つである場合は、そのようにします。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ