mociの日記: wget
社内、というかより厳密にはグループ企業内のいわゆるイントラネットが、機密保護の方向に大きく動いているようで。
ロボット型の検索がサービス停止というのはともかく、情報の載っているサイトそのものでもアクセス制限が課されてきています。制限の手段として、登録されている作業者の認証が可能な認証ディレクトリなんてのもあって、これが一番、頭が痛かったり。
いちおう仕組みとしては、派遣されてきている常駐の作業者でも登録は可能なのですが、うちの会社はケチって(か)、この登録を社員でしか、してくれません。こんな内部事情で、情報を出してくれている側に制限のかけ方を変えてもらうのも無理な相談です。社員がその都度、ダウンロードして見せるというのも、手間ばかりかかってらちがあきません。
ここはひとつ、こちらの内部でのみ参照可能なミラーでも作ろうということになりました。相手がhttpなので、wget。認証がPOSTなので、バージョン1.9以降が必要です。認証結果として受け取るCookieがセッション限りなので、そのまま再帰取得させようとしたら、全部POSTで取りに行ってしまいました。そこで、いったんHTTPヘッダごと保存して、Cookieを取り出してもう一度wgetで再帰取得してみることに。
ところが認証は通ってヘッダも取れるのに、いざ再帰取得の段になると失敗してしまいます。よくよく見てみれば、wgetは更新の確認にHEADを使うのに、HEADが拒否されてしまうというのが原因でした。認証かけているからHEADがダメなのかもしれませんし、そもそもIISでHEADが使えないという話もどこかで目にしたような気もします。いずれにせよ、初めて落とすのはOKで、二度目からはNG。しかたがないので、毎回全部落とす羽目に。
もしかしたらGETのIf-Modified-Sinceは有効なんじゃないかとも思うのですが、どこかにPOSTもCookieもIf-Modified-Sinceも使えて、Linuxでcronでまわせる再帰取得プログラムなんてのがあったりするんでしょうかね。
wget More ログイン