informa のパーサに URL を直接指定した際に 403 エラーが返される場合の対処
informa を利用して RSS フィードのパースを行う際の注意
informa は Java の RSS 関係のライブラリ。
問題
公式サイトの FAQ にも以下のように記載されている。
ChannelIF channel = FeedParser.parse(channelBuilder, fooURL);
基本的には URL の文字列を直接渡すだけでパーサが動いてくれる。 ただこれだと 403 エラーが帰ってくる場合がある。
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://hoge.com
原因
原因は HTTP コネクションのヘッダが正しく設定されていないこと。 接続先のサーバによって、サーバ側で弾かれている場合がある。
対処
要は明示的にコネクションのプロパティを設定してからパーサに渡してやれば良い。
単純に URL の文字列だけ渡して終わりとは行かなくなったけれど、 とりあえずユーザエージェントの情報を付加すれば正常に動く。
URL feedUrl = new URL(str); URLConnection conn = feedUrl.openConnection(); conn.setRequestProperty("User-agent","Hoge"); ChannelIF channel = FeedParser.parse(new ChannelBuilder(),conn.getInputStream());