JerseyClientで認証

Jerseyを使用したAPIのテストに使っていたJerseyClientは通常のHTTPクライアントとしても
便利なことに気づいたのでテストに使ってみる。 認証が必要な場合があったので自分用メモ

Basic認証を使う場合

// クライアント生成
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
// Basic認証の設定
Client. addFilter (new HTTPBasicAuthFilter ("USER_ID", "PASSWORD"));
// Formの設定
Form form = new Form();
form.add("title", "タイトル");
form.add("comment", "コメント");
// リクエスト送信
WebResource wr = client.resource("URL");
ClientResponse response = war. post (ClientResponse. class, form);

セッションを使う場合

// クライアント生成
ClientConfig config = new DefaultClientConfig();
Client client = Client. creates (config);
// Cookieを扱うフィルタを設定
client.addFilter(new ClientFilter() {
    private ArrayList<Object> cookies;
    @Override
    public ClientResponse handle(ClientRequest request) {
        if (cookies != null) {
            request.getHeaders().put("Cookie", cookies);
        }
        ClientResponse response = getNext().handle(request);
        if (response.getCookies() != null) {
            if (cookies == null) {
                cookies = new ArrayList<Object>();
            }
            cookies.addAll(response.getCookies());
        }
        return response;
    }
});
// ログイン
Form formLogin = new Form();
formLogin.add("userid", "USER_ID");
formLogin.add("password", "PASSWORD");
WebResource wrLogin = client.resource("LOGIN_URL");
ClientResponse resLogin = wrLogin.post(ClientResponse.class, formLogin);
// Formの設定
Form form = new Form();
form.add("title", "タイトル");
form.add("comment", "コメント");
// リクエスト送信
WebResource wr = client.resource("URL");
ClientResponse response = wr.post(ClientResponse.class, form);

参考) java - Jersey Client: Adding Cookies to Request - Stack Overflow