クライアントURL(cURL)は、システム間でデータを転送するためのライブラリおよびコマンドラインユーティリティです。 多くのプロトコルをサポートし、多くのUnixライクなオペレーティングシステムにデフォルトでインストールされる傾向があります。 一般に入手可能であるため、特にサーバー環境でローカルシステムにファイルをダウンロードする必要がある場合に最適です。
このチュートリアルでは、curl
コマンドを使用して、Webサーバーからテキストファイルをダウンロードします。 その内容を表示してローカルに保存し、ファイルが移動した場合はリダイレクトに従うようにcurl
に指示します。
インターネットからファイルをダウンロードするのは危険な場合があるため、信頼できるソースからダウンロードしていることを確認してください。 このチュートリアルでは、DigitalOceanからファイルをダウンロードし、ダウンロードしたファイルは実行しません。
インタラクティブターミナルを起動します!
ステップ1—リモートファイルを取得する
箱から出して、コマンドライン引数なしで、curl
コマンドはファイルをフェッチし、その内容を標準出力に表示します。
Digitalocean.comからrobots.txt
ファイルをダウンロードして試してみましょう。
curl https://www.digitalocean.com/robots.txt
画面にファイルの内容が表示されます。
OutputUser-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
curl
にURLを指定すると、リソースがフェッチされ、その内容が表示されます。
リモートファイルの保存
ファイルを取得してその内容を表示することはすべてうまくいきますが、実際にファイルをシステムに保存したい場合はどうでしょうか。
ダウンロード元のサーバーと同じファイル名でリモートファイルをローカルシステムに保存するには、--remote-name
引数を追加するか、-O
オプションを使用します。
curl -O https://www.digitalocean.com/robots.txt
ファイルがダウンロードされます:
Output % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 286 0 286 0 0 5296 0 --:--:-- --:--:-- --:--:-- 5296
curl
は、ファイルの内容を表示する代わりに、テキストベースの進行状況メーターを表示し、リモートファイルの名前と同じ名前でファイルを保存します。 cat
コマンドで確認できます。
cat robots.txt
このファイルには、以前に見たものと同じ内容が含まれています。
OutputUser-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
次に、ダウンロードしたファイルのファイル名を指定してみましょう。
ステップ2—特定のファイル名でリモートファイルを保存する
リモートサーバー上のファイルと同じ名前のローカルファイルがすでにある可能性があります。
同じ名前のローカルファイルが上書きされないようにするには、-o
または--output
引数に続けて、コンテンツを保存するローカルファイルの名前を使用します。
次のコマンドを実行して、リモートのrobots.txt
ファイルをローカルの名前のdo-bots.txt
ファイルにダウンロードします。
curl -o do-bots.txt https://www.digitalocean.com/robots.txt
もう一度、進行状況バーが表示されます。
Output % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 286 0 286 0 0 6975 0 --:--:-- --:--:-- --:--:-- 7150
次に、cat
コマンドを使用してdo-bots.txt
の内容を表示し、ダウンロードしたファイルであることを確認します。
cat do-bots.txt
内容は同じです:
OutputUser-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
デフォルトでは、curl
はリダイレクトに従わないため、ファイルが移動すると、期待どおりの結果が得られない場合があります。 それを修正する方法を見てみましょう。
ステップ3—リダイレクトに従う
これまでのすべての例には、https://
プロトコルを含む完全修飾URLが含まれています。 たまたまrobots.txt
ファイルをフェッチしようとして、www.digitalocean.com
のみを指定した場合、DigitalOceanはリクエストをhttp://
からhttps://
にリダイレクトするため、出力は表示されません。 :
これは、-I
フラグを使用して確認できます。このフラグは、ファイルの内容ではなく、要求ヘッダーを表示します。
curl -I www.digitalocean.com/robots.txt
出力は、URLがリダイレクトされたことを示しています。 出力の最初の行はそれが移動されたことを示し、Location
行は次の場所を示します。
OutputHTTP/1.1 301 Moved Permanently Cache-Control: max-age=3600 Cf-Ray: 65dd51678fd93ff7-YYZ Cf-Request-Id: 0a9e3134b500003ff72b9d0000000001 Connection: keep-alive Date: Fri, 11 Jun 2021 19:41:37 GMT Expires: Fri, 11 Jun 2021 20:41:37 GMT Location: https://www.digitalocean.com/robots.txt Server: cloudflare . . .
curl
を使用して手動で別のリクエストを行うか、--location
または-L
引数を使用して、curl
にリクエストを新しい場所にやり直すように指示できます。リダイレクトが発生したときはいつでも。 試してみる:
curl -L www.digitalocean.com/robots.txt
今回は、curl
がリダイレクトに従ったため、出力が表示されます。
OutputUser-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz
-L
引数を前述の引数のいくつかと組み合わせて、ファイルをローカルシステムにダウンロードできます。
curl -L -o do-bots.txt www.digitalocean.com/robots.txt
警告:オンラインの多くのリソースでは、curl
を使用してスクリプトをダウンロードして実行するように求められます。 ダウンロードしたスクリプトを実行する前に、実行可能にして実行する前に、スクリプトの内容を確認することをお勧めします。 less
コマンドを使用してコードを確認し、実行したいものであることを確認します。
結論
curl
を使用すると、リモートシステムからファイルをすばやくダウンロードできます。 curl
は多くの異なるプロトコルをサポートし、データを送受信するためのリモートAPIとの対話など、より複雑なWebリクエストを作成することもできます。
man curl
を実行して、curl
のマニュアルページを表示すると、詳細を確認できます。