このチュートリアルでは、LinuxのcURLコマンドを紹介します。この強力なユーティリティの機能をガイドし、それが達成できるすべての機能を理解するのに役立ついくつかの例を示します。
cURLコマンドは、20を超えるサポートされているプロトコルの1つを使用して、サーバーにデータをダウンロードまたはアップロードするために使用されます。このデータは、ファイル、電子メール、またはWebページです。
ディレクトリ
-
cURLコマンドとは何ですか?
-
ファイルをダウンロード
-
リダイレクトに従う
-
ダウンロードを停止して続行
-
タイムアウトを指定する
-
ユーザー名とパスワードを使用
-
プロキシを使用
-
大きなファイルを分割してダウンロードする
-
クライアント証明書
-
サイレントcURL
-
タイトルを取得
-
複数のヘッダー
-
ファイルの公開(アップロード)
-
メールを送る
-
メールを読む
-
cURLとwgetの違い
cURLコマンドとは何ですか?
cURLは、WebサイトまたはAPIとのやり取り、端末へのリクエストの送信、応答の表示またはファイルへのデータの記録に理想的なツールです。場合によっては、取得したデータを他の関数に渡して処理するために、より大きなスクリプトの一部として使用されます。
cURLはサーバーからファイルを取得するために使用できるため、通常はWebサイトの一部をダウンロードするために使用されます。この機能は適切に実行できますが、このジョブにはwgetコマンドの方が適している場合があります。
この記事の後半で、wgetとcURLの類似点と相違点をいくつか紹介します。
次のセクションでは、cURLの使用を開始する方法について説明します。
ファイルをダウンロード
cURLに提供できる最も基本的なコマンドは、Webサイトまたはファイルをダウンロードすることです。別のプロトコルを指定しない限り、cURLはデフォルトのプロトコルとしてHTTPを使用します。Webサイトをダウンロードするには、次のコマンドを発行します。
$ curl http://www.google.com
もちろん、検索するウェブサイトやページを入力してください。
他のオプションなしでこのような基本的なコマンドを実行しても、提供したページのソースコードを取得するようcURLに指示するだけなので、ほとんど役に立ちません。
コマンドを実行すると、ターミナルはHTMLやその他のWebスクリプトコードで一杯になり、この形式では特に役に立ちません。
WebサイトをHTMLドキュメントとしてダウンロードして、コンテンツを表示し、-outputオプションを追加してcURLを実装してみましょう。
$ curl www.likegeeks.com --output likegeeks.html
これで、ダウンロードしたWebサイトを開いてブラウザーに表示できるようになりました。
オンラインファイルをダウンロードする場合、コマンドはほぼ同じです。ただし、上の例で行ったように、必ずcURLに-outputオプションを追加してください。
これを行わないと、cURLがオンラインファイルのバイナリ出力を端末に送信し、端末が誤動作する可能性があります。
500KBのWord文書のダウンロードを開始すると、次のようになります。
Word文書のダウンロードが開始され、ダウンロードの現在の進行状況がターミナルに表示されます。ダウンロードが完了すると、ファイルを保存したディレクトリにファイルが表示されます。
この例では、ディレクトリが指定されていないため、現在の作業ディレクトリ(cURLコマンドが実行されるディレクトリ)に保存します。
また、cURLコマンドで指定した-Lオプションに気付きましたか?このファイルをダウンロードするには、次のセクションでその機能を紹介する必要があります。
リダイレクトに従う
WebサイトのURLを生成しようとしたときに出力が空の場合は、そのWebサイトがcURLに別のURLにリダイレクトするように指示している可能性があります。デフォルトでは、cURLはリダイレクトに従いませんが、-Lスイッチを使用してそれを指定できます。
$ curl -L www.likegeeks.com
この記事の調査では、ほとんどのWebサイトで-Lを指定する必要があることがわかったため、この小さなトリックを忘れないでください。デフォルトでは、ほとんどのcURLコマンドに添付することもできます。
ダウンロードを停止して続行
ダウンロードが中断された場合、または大きなファイルをダウンロードする必要があるが、すべての操作を一度に完了したくない場合、cURLは中断されたところから送信を続行するオプションを提供します。
手動で送信を停止するには、現在実行中のほぼすべてのプロセスを停止するのと同じように、ctrl + cキーの組み合わせを使用してcURLプロセスを終了できます。
ダウンロードを開始しましたが、ctrl + cで中断されました。次の構文を使用して、ダウンロードを再開してみましょう。
$ curl -C - example.com/some-file.zip --output MyFile.zip
-Cスイッチはファイル転送を復元するデバイスですが、その後にダッシュ(-)が続くことにも注意してください。これはcURLにファイル転送を続行するように指示しますが、この手順を実行するには、最初にダウンロードされた部分を確認し、ダウンロードの最後のバイトを見つけてどこから回復するかを決定する必要があります。
現在、ファイル転送は再開されており、引き続きダウンロードを完了することができます。
タイムアウトを指定する
操作を行わなかった後もしばらくcURLを動作させたい場合は、コマンドでタイムアウトを指定できます。これは、cURLの一部の操作にはデフォルトでタイムアウトがないため、特に便利です。無期限にハングする場合は、1つ指定する必要があります。
-mスイッチを使用して、コマンドの実行に必要な最大時間を指定できます。指定された時間が経過すると、cURLはファイルをダウンロードまたはアップロードしている場合でも、実行中の操作を終了します。
cURLは、必要な最大時間を秒単位で指定します。したがって、1分後にタイムアウトするには、コマンドは次のようになります。
$ curl -m 60 example.com
cURLで指定できる別のタイプのタイムアウトは、リンクに費やされた時間です。これにより、cURLがオフラインまたはアクセスできないホストに接続しようとするのに多くの時間を費やすことがなくなります。
また、秒をパラメーターとして受け入れます。このオプションは、-connect-timeoutとして記述されます。
$ curl --connect-timeout 60 example.com
ユーザー名とパスワードを使用
-uスイッチを使用して、cURLコマンドでユーザー名とパスワードを指定できます。たとえば、FTPサーバーを介して認証する場合、構文は次のようになります。
$ curl -u username:password ftp://example.com
任意のプロトコルで使用できますが、FTPは通常、このような単純なファイル転送に使用されます。
上のスクリーンショットに示されているファイルをダウンロードする場合は、ファイルの完全パスを使用して同じコマンドを発行するだけです。
$ curl -u username:password ftp://example.com/readme.txt
プロキシを使用
ホストに接続する前に、cURLを直接使用してプロキシを使用するのは簡単です。特に指定しない限り、cURLはデフォルトでHTTPプロキシを使用します。
-xスイッチを使用してプロキシを定義します。この例ではプロトコルが指定されていないため、cURLはHTTPプロキシであると想定します。
$ curl -x 192.168.1.1:8080 http://example.com
このコマンドは、example.comに接続するためのプロキシとして、ポート8080の192.168.1.1を使用します。
他の契約でも使用できます。以下は、HTTPプロキシを使用してUR cURLLをFTPサーバーに転送し、ファイルを取得する例です。
$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt
cURLは他の多くのタイプのプロキシとこれらのプロキシで使用するオプションをサポートしますが、さらなる拡張はこのガイドの範囲を超えます。プロキシトンネリング、SOCKSプロキシ、認証などの詳細については、cURLのマニュアルページを参照してください。
チャンクで複数のファイルをダウンロードする
ファイル転送を停止して再開する方法を示しましたが、cURLでファイルの一部のみをダウンロードしたい場合はどうでしょうか。このようにして、複数のブロックファイルをダウンロードできます。
ダウンロード制限または同様の制限を維持する必要がある場合は、ファイルの特定の部分のみをダウンロードできます。–rangeフラグは、この操作を完了するために使用されます。
サイズはバイト単位である必要があります。したがって、最新のUbuntu .isoファイルを100 MBのブロックサイズでダウンロードする場合、最初のコマンドは次のようになります。
$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
2番目のコマンドは、次のバイトで別の100 MBブロックを抽出してダウンロードする必要があります。
$ curl --range 0-99999999 http://releases.ubuntu.com/
18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2
すべてのブロックがダウンロードされるまで、このプロセスを繰り返します。最後の手順は、これらのブロックをファイルに結合することです。これは、catコマンドを使用して実行できます。
$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso
クライアント証明書
サーバーへのアクセスに基本認証の代わりに証明書認証を使用するには、–certオプションを使用して証明書ファイルを指定できます。
$ curl --cert path/to/cert.crt:password ftp://example.com
cURLには、証明書ファイルの形式に関する多くのオプションがあります。
証明書に関連するその他のオプションがあります:–cacert、–cert-status、–cert-typeなど。オプションの完全なリストについては、manページを確認してください。
サイレントcURL
cURLの進行状況メーターとエラーメッセージを表示したくない場合は、-sスイッチでこの機能を提供できます。要求したデータは引き続き出力されるため、コマンドを100%サイレントにする場合は、出力をファイルに送信する必要があります。
このコマンドを-Oフラグと共に使用して、ファイルを現在の作業ディレクトリに保存します。これにより、cURLが0出力を返すことが保証されます。
$ curl -s -O http://example.com
または、–outputオプションを使用して、ファイルを保存する場所を選択し、名前を指定することもできます。
$ curl -s http://example.com --output index.html
タイトルを取得
cURLを使用してリモートアドレスのタイトルを取得するのは非常に簡単です。-Iオプションを使用するだけで済みます。
$ curl -I example.com
このオプションを-Lオプションと組み合わせて使用すると、cURLはリダイレクト先の各アドレスのヘッダーを返します。
$ curl -I -L example.com
複数のタイトル
-Hオプションを使用して、ヘッダーをcURLに渡すことができます。複数のヘッダーを渡すには、-Hオプションを複数回使用するだけで済みます。これは例です:
$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com
ファイルの公開(アップロード)
POSTは、Webサイトがデータを受け入れる一般的な方法です。たとえば、オンラインでフォームに入力する場合、POSTメソッドを使用してブラウザからデータを送信することがよくあります。この方法でWebサイトにデータを送信するには、-dオプションを使用します。
$ curl -d 'name=geek&location=usa' http://example.com
テキストの代わりにファイルをアップロードするには、構文は次のようにする必要があります。
$ curl -d @filename http://example.com
必要に応じて複数の-dフラグを使用して、アップロードするすべての異なるデータまたはファイル名を指定します。
ファイルをFTPサーバーにアップロードする場合は、-Tオプションを使用できます。
$ curl -T myfile.txt ftp://example.com/some/directory/
メールを送る
メールを送信するだけで、コンピューター(またはその他のデバイス)からメールサーバーにデータがアップロードされます。cURLはデータをアップロードできるため、メールの送信に使用できます。多くのオプションがありますが、SMTPサーバーを介して電子メールを送信する方法の例を次に示します。
$ curl smtp://mail.example.com --mail-from [email protected] --mail-rcpt [email protected] –upload-file email.txt
メールファイルは正しくフォーマットする必要があります。このように:
$ cat email.txt
From: Web Administrator <[email protected]>
To: John Doe <[email protected]>
Subject: An example email
Date: Sat, 7 Dec 2019 02:10:15
John,
Hope you have a great weekend.
-Admin
いつものように、より詳細で専門的なオプションはcURLのマニュアルページにあります。
メールを読む
cURLはIMAP(およびIMAPS)とPOP3をサポートしています。どちらもメールサーバーからメールを取得するために使用できます。
次のようにIMAPを使用してログインします。
$ curl -u username:password imap://mail.example.com
このコマンドは、使用可能なメールボックスを一覧表示しますが、特定のメッセージは表示しません。これを行うには、–Xオプションを使用してメッセージのUIDを指定します。
$ curl -u username:password imap://mail.example.com -X 'UID FETCH 1234'
cURLとwgetの違い
cURLとwgetはどちらもサーバーからデータを取得できるため、混乱する場合があります。しかし、これは彼らが共通している唯一のものです。
この記事では、cURLの機能を紹介します。wgetは、異なる関数のセットを提供します。wgetはWebサイトをダウンロードするための最良のツールであり、ディレクトリとリンクを再帰的に走査してWebサイト全体をダウンロードできます。
ウェブサイトをダウンロードするには、wgetを使用します。HTTPまたはHTTPS以外のプロトコルを使用する場合、またはそれを使用してファイルをアップロードする場合は、cURLを使用してください。cURLは、Webから個々のファイルをダウンロードする場合にも適していますが、wgetも優れた機能を発揮します。