気まぐれ更新

wgetでBASIC認証+フォーム認証を回避する方法

HTTPやFTP経由でファイル取得を行うことができる便利ツールwgetを用いて、認証つきのページを取得する方法をご紹介します。

そもそもwgetって

wgetは前述にある通り、HTTPやFTP経由でファイル取得を行うことができる便利コマンドになります。 他のファイル取得コマンドと異なる点としては、ソースコードバイナリのダウンロードだけでなく、Webサイト全体あるいは特定の階層をクローリングし、一括取得できるという点があります。また、何らかの理由で中断されたダウンロードを中段したところから継続できるなど、ダウンローダーとしての機能を持っています。これにより、ネットワーク帯域が乏しい状況に優しい子にもなっています。

基本的な使い方

基本的には

wget [option] [host]

といった使い方をします。

オプションは結構たくさんあるので、今回は説明を割愛させていただきます。

BASIC認証再帰的に取得する方法

最近、あまりBASIC認証自体使われていないような気もしますが、、紹介いたします。

wget --http-user={user} --http-passwd={passward} {http://example.com}

このようにユーザ、パスワード、URLの順に指定することにより

wgetからBASIC認証を行ったうえでファイルを取得することができます。

フォーム認証後再帰的に取得する方法

wget --keep-session-cookies --save-cookies=cookies.txt --post-data 'hoge=abc123&huga=123456' http://login/form
wget --load-cookies cookies.txt -r -k -E  http://example.com

上記のように認証後のcookieを保存するtxtファイルを指定し、そのcookieを用いて認証するという流れです。

hoge, hugaのところは各フォームのname属性の値を入れて、認証情報を入力してください!

BASIC認証後、フォーム認証を行い取得する方法

ここが一番苦労しました。。

上で紹介したフォーム認証のやり方は認証後の永続的にcookieが変わらない場合には有効ですが

現在主流のセッションcookieによる認証の場合有効ではありません。

なので、今回は直接headerとしてcookieをつけて認証回避することにしました

wget --http-user={user} --http-passwd={passward} --header 'Cookie:cookie_key=cookie_value;' -r -k -E  http://example.com

このようにBASIC認証後、直接セッションcookieを指定してあげることによって

2つの認証後のページをクローリングすることができます。

セッションcookieはブラウザごとのdeveloper toolsから参照することができます。