前提・実現したいこと
HttpURLConnectionを__h__用いてJavaでJsonをPOSTする方法を教えてください。
具体的にやろうとしていることをお伝えすると、KeycloakのREST APIを呼び出すために、アクセストークンを取得する必要があります。そのため、必要情報をPOSTしてアクセストークンを取得しようとしているのですが、うまくできず。。
発生している問題・エラーメッセージ
失敗している箇所ですが、
BufferedReader br = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));
の部分で、以下のエラーが出てしまいます。
java.io.IOException: Server returned HTTP response code: 415 for URL: https://localhost:8443/auth/realms/master/protocol/openid-connect/token
該当のソースコード
String json = "{" + ""username": "XXX"," + ""password": "XXX"," + ""grant_type": "XXX","
- ""client_id": "XXX"" + "}";
public void callPost() {
/* 証明書エラーを無視するための処理Start*/
~割愛~
/* 証明書エラーを無視するための処理End*/
// URLの設定
URL connectUrl = new URL("https://localhost:8443/auth/realms/master/protocol/openid-connect/token");
HttpsURLConnection urlconn = (HttpsURLConnection) connectUrl.openConnection();
((HttpsURLConnection) urlconn).setSSLSocketFactory(sslcontext.getSocketFactory());
// HttpURLConnectionの各種設定
urlconn.setRequestMethod("POST");
urlconn.setDoInput(true);
urlconn.setDoOutput(true);
urlconn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
// 接続を確立する
urlconn.connect();
// リクエスとボディに書き込みを行う
PrintStream ps = new PrintStream(urlconn.getOutputStream());
ps.print(json);
ps.close();
// レスポンスを受け取る
//正常終了時はHttpStatusCode 200が返ってくる
if (urlconn.getResponseCode() != 200) {
//エラー処理
}
//HttpURLConnectionからInputStreamを取得し、読み出す
BufferedReader br = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
// InputStreamを閉じる
br.close();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
以降割愛。
回答2件
あなたの回答
tips
プレビュー