basic認証+フィード読込
javaでRSSリーダーを作ろうとしててbasic認証でつまづいたのでちょっとメモ。
basic認証かかってるページのフィードをとりあえず何も考えずに読み込んでみた。パースにはROMEを使用してみる。
// feed読込 URL feedUrl = new URL("フィードURL"); SyndFeedInput input = new SyndFeedInput(); SyndFeed feed = input.build(new XmlReader(feedUrl));
実行すると
java.io.IOException: Server returned HTTP response code: 401 for URL: 〜
('A`)
煮詰まってたら id:dragon3 からアドバイスいただいた!
たいした知識もない自分はbasic認証についてココを見てまず勉強。どうもBASE64エンコードしたユーザ名/パスワードをAuthorizationヘッダに付与する必要があるみたいで。サンプルはこちらを参考に。
案としては
- httpヘッダを直接編集
- java.net.Authenticatorを継承したクラスを作成
か。httpヘッダ直接編集はスマートじゃない気がしたので、まずはAuthenticator作成方法で実装してみる。
というわけでAuthentication作成。
class TestAuthenticator extends Authenticator { private String username; private String password; public TestAuthenticator(String username, String password) { this.username = username; this.password = password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password.toCharArray()); } }
作ったAuthenticatorを使用して再チャレンジ。
// basic認証用設定 Authenticator.setDefault(new TestAuthenticator("ユーザ名", "パスワード")); // feed読込 URL feedUrl = new URL("フィードURL"); URLConnection urlConnection = feedUrl.openConnection(); SyndFeedInput input = new SyndFeedInput(); SyndFeed feed = input.build(new XmlReader(urlConnection));
フィード取得OK!!
id:dragon3 ++