HttpEntityは必ずconsumeすべし

HttpClient 4 系でいろいろとクロールすると途中でコネクションプールのコネクションが枯渇して、フリーズ状態になる問題に遭遇した。いまいち、原因を特定するのに無駄に時間を使ってしまったのだけど、結果的にはHttpEntityは必ずconsume(つまりclose)する必要があることだ。このHttpEntityはHttpClientのexecuteをした時に返ってくるHttpResponseから取得して利用するものだけど、レスポンスのステータスだけ見たければ、HttpResponseから値を取得してHttpEntityを使う必要がない。なので、利用したコネクションが解放されず、フリーズに陥る。というわけで、HttpEntityはレスポンスのボディが必要なくても取得してconsumeして終わるのが良いらしい…。

HttpClient 4 へ移行してみた

HttpClient 4 のチュートリアルもざっくり眺め、S2Robotのコードを書き換えてみた。 S2Robot の CommonsHttpClient を捨てて置き換えかなっと始めは思っていたのだけど、別に CommonsHttpClient はまま残せるじゃん、みたいな感じでわかったのでそのまま残し、HcHttpClient なるものを追加しておいた。CommonsHttpClient のは dicon 上は有効にしていないので、今まで通りに使いたければ、s2robot_client.dicon を編集すれば良い(と思う)。まぁ、今後的には CommonsHttpClient の方はメンテしていくかはわからないけど。そんな感じで、HttpClient 3 を卒業して、HttpClient 4 使いになることができました。これで新しい機能の恩恵を受けることができるようになった…。

HttpClient 4 へ移行

今まで HttpClient 3.1 にしがみついていた私だけど、NTLM 問題とかあったりして、そろそろ HttpClient 4 に行かねばならんのかな、と思う今日この頃。というわけで、S2Robot 0.5 では HttpClient 4 系に移行します。S2Robot の基本的なインターフェースは変わらないと思うけど、S2Robot の BasicAuthentication というような認証系のクラスはインターフェースに変更したりしようと思います。そんな感じですが、問題がありましたらお知らせくださいー。

Sitemapsに対応

S2Robot で半年以上放置してきたサイトマップ対応をしました。sitemaps.xml とかをクロールの対象としてクロールすると、そのサイトマップのリンクを次のクロール先として展開します。対応するフォーマットとしては、XML Sitemaps、XML Sitemaps Index とテキスト(URLリスト)です(RSSとかは未対応)。というわけで、S2Robot もまた一つ成長しました 🙂 これに合わせて、Fess もサイトマップを使えるようになりました。URL として指定すれば、サイトマップのリンクをクロール対象にすることができます。Fess 2.0.0 もぼちぼちリリースしても良いかな、っと思い始めています。