スキップしてメイン コンテンツに移動

wget vs curl - コマンドラインダウンロードツール頂上決戦

「wget」って便利ですよね。
僕はPHPerなので、PHPを使ってcronを回したい時は、今ならCLIモードを利用してバッチを書きますが、以前はそんな事できなかった。PHPでバッチ処理するには、wgetでlocalhostのURLを叩きに行くのが手っ取り早かったんです(もちろん、外からのアクセスへの対策も行いつつ)。
そんなこんなでよく使うwgetですが、先日node.jsをインストールした時に出てきた、curlというツールも同じような内容のツールだと感じました。

って事は、どっちが強いか決めるのがジャンプ世代じゃないですかね?




では早速それぞれがどういうソフトウェアだと説明されているか見てみます。
wgetとは
GNU Wget is a free utility for non-interactive download of files from the Web.
ということで、「GNU Wgetはウェブからファイルを非対話的(コマンドラインツールですから)にダウンロードするためのフリーソフトウェアだぜ」との事です。

対してcurlとは
curl is a tool to transfer data from or to a server.
という感じで、「curlはサーバーにデータを送受信(from or to)するツールでっせ」という事で、wgetとは違ってダウンロードツールとは明記していません。

wgetはgeturl(wgetの前身)時代も含めると1996年に始まったプロジェクトです。また、curlは1997年に始まったプロジェクトです。wgetの方が少し先輩ですね。
両者とも、10年を越えて継続され続けているプロジェクトだけあって、しっかり作り込まれていて素晴らしいツールです。
なにせ、manページに掲載されているオプションの数! 全部使うことはないでしょうね・・・。ニッチなニーズにも対応してくれそうな予感です。

wgetは、ダウンロードに特化している分、書式が簡単です(個人的感覚)。特に
wget -r http://www.example.com/
のような再帰的にダウンロードを試みるオプションなどは重宝しますね!

かたやcurlは、URLの指定が柔軟(個人的超感覚)です。
curl http://www.example.com/eroero[0-100].jpg
これで画像だけを収集できます。性の扉を叩いたくらいの年で、このツールを知ってしまったらお猿さん確定ですね。こえー!

wgetでも「-A」オプションで正規表現は利用できますが、アスタリスクがメタ文字ではなく単なるワイルドカード的な扱いだったり、どっちかというとコマンドラインでファイル名を指定する感覚に似ているようです。

オプションがありすぎて、正直なところ、まとめようがない(言っちゃった!)ところもあるんですが、完全に好みですね。

wgetはGNUプロジェクトですので、OSがLinuxならば、標準でインストールされているでしょう。Linux環境でcurlを利用するには、yumやapt-get(ソースコンパイルももちろんOK)する必要があります。というか、node.jsの時はapt-getしました(ホント便利だよなぁ)。

かたやMac OSには、標準でcurlがインストールされているようです。wgetは敢えてインストールしない限り利用できないようです。この辺はうまく住み分けできているのかな?
PHPer的な発想で言うと、cronやバッチではwgetを使うくせにcurlはPHPでサポートされている(curlというか、内部関数として、curlのライブラリであるlibcurlを呼び出せる)ので、PHPの中ではcurlを使うんですね。

正直、僕が時間をかけてクローラーをこしらえるより、wgetでサササとバッチを書いたほうが正確・高速・低コストという恐ろしい(いや素晴らしい!!)結果。

実践的な使い方をまとめるのはまたの機会に・・・。

see also
curl の基本的な使い方 -コマンド編-
curl の基本的な使い方 -コマンド編- その2
curl の基本的な使い方 -設定編-
Wget は必ず最新版を使います
wgetでリンク切れリストを取得する


コメント

  1. >wgetでも「-A」オプションで正規表現は利用できますが、アスタリスクがメタ文字ではなく単なるワイルドカード的な扱いだったり、どっちかというとコマンドラインでファイル名を指定する感覚に似ているようです。

    それ、正規表現じゃあらへん。

    wget --help によると --accept-regexや--reject-regexで正規表現が使えることになってるけど、試したらダメだった。

    返信削除
  2. コメントありがとうございます!

    正規表現ではないですね。今考えれば単なるファイル名のパターンを指定するだけでした。
    どういう心境で書いたかもう忘れましたが、ここでお詫びしたいと思います。

    >wget --help によると --accept-regexや--reject-regexで正規表現が使えることになってるけど、試したらダメだった。

    改めて調べましたが、wgetで正規表現は使えないようです。
    ちなみにいうと、--accept-regexや--reject-regexというオプションは見当たらなかったですね。grepかけただけですが:-)
    私が今回調査に利用したwgetのバージョンは以下の通りです。
    GNU Wget 1.13.4 built on linux-gnu.

    過去のバージョンや他のOSでの実装では使えるのかも知れません。

    返信削除

コメントを投稿

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。