BETA

JavaのAPIで、認証情報をCookieで取得・保管する方法

投稿日:2020-04-05
最終更新:2020-04-05

運用業務とかしているとファイルをダウンロードしたり、サイトにアクセスして解析したりーなんてことないですか??
もしあるなら自動化してみません?

ということで、JavaでAPIを作成する時の認証情報の保持の仕方を書いていこうかなーと思います。

そもそもAPIってなんぞや?

APIを一言で表すと、常に同じ結果を返してくれる便利なやつ!です。
APIを叩くことで特定のファイルをダウンロードしたり、特定の情報を返してくれたりします。

APIの話はこれくらいにして、ほとんどのAPIを作るには認証情報(ログイン状態)を保つ必要があります。
すなわち、Cookieの中にある情報を使う必要があります。

Javaで書いてみよう

JavaでCookieを操作する簡単な方法として、CookieManagerがあります。
そのCookieManagerといくつかのクラスを使ってやれば不思議と簡単にできちゃうんです。
この辺を深く理解しようとするとハマると思うので出来るんだなーくらいで覚えておけば大丈夫。

サンプルを見てみましょう

CookieManager manager = new CookieManager();  
// 全てのCookieを受け入れる。  
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);  
CookieHandler.setDefault(manager);  

これで大体の人は繋いで認証情報を保持することができるはずです。
ただし、JRE1.6.0_20より前のバージョンを使っている人はもう一手間必要です。
職場の環境によって使い分けてください。

上記コードの後ろに、

Locale.setLocale(Locale.US);  

をつけないとCookieの有効期限が0になりすぐに破棄されてしまいます。
プログラムに英語だよーって教えてあげないと理解してくれないんです。

一応JRE1.6.0_20以前のバージョンを想定して接続まで書いておきます。

import java.io.OutputStream;  
import java.io.PrintStream;  
import java.net.CookieHandler;  
import java.net.CookieManager;  
import java.net.CookiePolicy;  
import java.net.HttpURLConnection;  
import java.net.URL;  
import java.util.Locale;  

public class Sample {  
    public static void main(String[] args) {  
        // 認証に必要なパラメータをセット、適宜書き換えて下さい  
        String param = "userId=sample&password=sample";  

        HttpURLConnection conn =null;  

        try {  
            CookieManager manager = new CookieManager();  
            // 全てのCookieを受け入れる。  
            manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);  
            CookieHandler.setDefault(manager);  
            // 1.6.0_20以前だと必要       
            Locale.setDefault(Locale.US);  

            // 認証URLを設定、適宜書き換えて下さい  
            URL url = new URL("https://sample.com");  

            conn = (HttpURLConnection)url.openConnection();  

            // 送受信の許可とメソッド  
            conn.setDoInput(true);  
            conn.setDoOutput(true);  
            conn.setRequestMethod("POST");  

            OutputStream os = conn.getOutputStream();  
            PrintStream ps = new PrintStream(os);  

            ps.print(param);  

            conn.connect();  

            // レスポンスコード取得  
            final int status = conn.getResponseCode();  

            // レスポンスコードが200番だったら  
            if(status == HttpURLConnection.HTTP_OK) {  
                // any code  
            }  
        } catch(Exception e) {  
            // any code  
        }      
    }  
}  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@umesanの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう