プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

basic認証+フィード読込

javaRSSリーダーを作ろうとしてて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 ++