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から参照することができます。