curlはURL構文を用いてデータを転送するためのオープンソースなコマンドラインツール/ライブラリだ。
curlはURL構文を用いてデータを転送するためのオープンソースなコマンドラインツール/ライブラリ。プロジェクト名は「cURL」(Client for URLs)であり、コマンドラインツール「curl」、ライブラリの「libcurl」がその成果物となる。
libcurlはHTTP/HTTPSをはじめとする多くのプロトコル、各種の認証方式をサポートし、ファイル転送の中断と再開などの機能を持つライブラリだ。そして、curlはlibcurlの機能を利用して、コマンドラインやスクリプトからデータの転送を行うためのコマンドラインツールである。libcurl/curlは移植性が高く、さまざまなOSプラットフォームで動作する。curlは公式サイトのダウンロードページから入手できる(OSによっては標準でインストールされているかもしれない)。
コマンドラインツールとしてのcurlの最も簡単な使い方は「curl 取得したいデータのURL」を実行する。以下に例を示す。
> curl http://www.atmarkit.co.jp/ait/subtop/dotnet/
上記のコマンドを実行すると、コンソールに取得したデータ(この場合は、本フォーラムのトップページのHTML)が(HTMLテキストベースで)表示される。
ファイルをカレントディレクトリに保存するには-oオプションまたは-Oオプションを使用する。
以下に例を示す。
# -oオプションの使用例
> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -o vs15preview3.html
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 68963 0 68963 0 0 308k 0 --:--:-- --:--:-- --:--:-- 308k
# -Oオプションの使用例
> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 68963 0 68963 0 0 307k 0 --:--:-- --:--:-- --:--:-- 307k
-oオプションでは指定するファイル名にディレクトリパスを含めてもよい。ただし、このときには--create-dirsオプションを同時に指定する必要がある。以下に例を示す。
> curl http://www.atmarkit.co.jp/ait/articles/1608/05/news045.html -o test\vs15preview3.html --create-dirs
これに対して、-Oオプションでは(ファイル名は自動的に決定されることから)ファイルは常にカレントディレクトリに保存される。
URLには「{}」や「[]」を使って、複数のファイルも指定できる。以下に例を示す。
> curl http://localhost:9080/hoge[1-3].txt -o huga#1.txt
見れば分かる通り、これはhoge1.txt〜hoge3.txtの3つのテキストファイルをダウンロードするものだ。ここでは保存先にファイル名として「huga#1.txt」を指定している。この「#1」は上記の「[1-3]」に呼応するもので、保存時に自動的に「1」〜「3」が「huga」に付加されるようになる。なお、curlコマンドでは複数のURLを指定可能だが、ダウンロード自体はシーケンシャルに行われる(ただし、libcurlライブラリは複数のファイルの同時ダウンロードをサポートしている)。
curlで取得できるのはHTMLページだけではない。例えば、Webサーバ上に以下のようなPythonファイル(hello.pyファイル)があったとする。
#!/usr/bin/env python
print('hello from python script')
このファイルを取得して、実行するコマンドラインは次のようになる。
> curl -s http://localhost:9080/hello.py | python -
hello from python script
このようにすると、curlコマンドは取得したデータを標準出力に送る。pythonコマンドの直後にある「-」は標準入力の内容を受け付けて、それを実行することを意味している。また、UNIX系統のOSであれば、以下のようなことも可能だ(ここではシェルにbashを使用)。また、ここで指定している-sオプションは「silent」モードを意味し、-oオプション指定時に表示されたプログレスバー(やエラーメッセージ)を表示しないようになる。
$ python -c "$(curl -s http://localhost:9080/hello.py)"
hello from python script
詳細は割愛するが、文字列中の「$()」はコマンド置換を行うbashの機能だ(ここで行っているようなシンプルなものであれば、バッククオートで囲んでもよい)。この場合はcurlコマンドで取得したファイルの内容がpythonコマンドによって実行される。何らかの情報を求めてWebをさまよっていると、curlと他のコマンドを組み合わせた上記のようなコマンドラインを目にすることがたまにあるので、覚えておくとよいだろう。
curlと同様なコマンドラインベースのファイル転送ツールとしては、GNU Wgetもあるが、curlの公式サイトのFAQページによれば、「curlはWgetのクローンではない。…… 中略 …… 開発時にはcurlがWgetの代わりになるとか、競合になるといった意識はなかった。curlは単発のファイル転送を目的としている」(要約)とある。
Wgetのようにリンクをたどって再帰的にファイルのダウンロードを行うような機能はcurlにはないが、その一方でサポートしているプロトコルはcurlの方が多いなど、機能面で両者には違いがあることに注意しよう。
curlはURL構文を用いてデータを転送するためのオープンソースなコマンドラインツール/ライブラリで、主にコマンドラインからWebからデータを取得するために使われる。1行でデータ(ファイル)を取得できる手軽さから、スクリプト言語と組み合わせて、ワンライナーでツールなどをインストールするためにもよく使われている。Windowsユーザーにはあまりなじみがないかもしれないが、手軽で便利なツールだ。
Copyright© Digital Advantage Corp. All Rights Reserved.