informa のパーサに URL を直接指定した際に 403 エラーが返される場合の対処

informa を利用して RSS フィードのパースを行う際の注意

informaJavaRSS 関係のライブラリ。

問題

公式サイトの 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());

参考