Я пытаюсь подключиться к API безопасного отдыха SSL, который в основном использует запрос JSON и генерирует запрос JSON. Который с помощью почтальона я могу подключить / аутентифицировать API, я могу сделать запрос sh JSON и получить желаемый ответ JSON. Ключ publi c уже используется в организации API. во время использования почтальона API запрашивает выбранный сертификат SSL (установленный в браузере) из всплывающего окна, и когда я выбираю, он работает отлично.
Теперь, когда я пытаюсь подключить тот же API в JAVA, используя eclipse, я не могу аутентифицироваться. На самом деле я пытаюсь использовать pu sh файл .pfx (чей ключ publi c уже предоставлен организации API) в java. Но я получаю 401 ответ "Ошибка аутентификации".
Вот мой код :
public static String connectAPI(String a1,String a2,String a3,String a4,String a5,String a6,String a7,String a8,String a9) throws Exception {
String url="https://apiURL.com";
String name = "TEST1234";
String password = "password";
String authString = name + ":" + password;
System.out.println("auth string: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
System.out.println("Base64 encoded auth string: " + authStringEnc);
URL object=new URL(url);
HttpURLConnection con = (HttpURLConnection) object.openConnection();
KeyStore ks = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream("C://tmp/abc.pfx");
ks.load(fis, "password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "password".toCharArray());
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(), null, null);
con.setRequestProperty("Authorization", "Basic " + authStringEnc);
System.setProperty("java.net.useSystemProxies", "true");
if (con instanceof HttpsURLConnection) {
((HttpsURLConnection)con)
.setSSLSocketFactory(sc.getSocketFactory());
}
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
con.connect();
//con.setRequestProperty("User-Agent", "Mozilla/5.0");
JSONObject main_body = new JSONObject();
JSONObject jsonbdy = new JSONObject();
JSONObject header=new JSONObject();
JSONObject body =new JSONObject();
header.put("a1",a1);
header.put("a2", a2);
header.put("a3", a3);
header.put("a4", a4);
header.put("a5", a5);
body.put("a6",a6);
body.put("a7", a7);
body.put("a8", a8);
body.put("a9", a9);
jsonbdy.put("Header", header.toString());
jsonbdy.put("Body", body.toString());
main_body.put("JSONBDY", jsonbdy.toString());
OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
wr.write(main_body.toString());
wr.close();
StringBuilder sb = new StringBuilder();
int HttpResult = con.getResponseCode();
System.out.println("HttpResult:"+HttpResult);
BufferedReader br;
if (HttpResult == HttpURLConnection.HTTP_OK) {
br = new BufferedReader(
new InputStreamReader(con.getInputStream(), "utf-8"));
}else {
br = new BufferedReader(
new InputStreamReader(con.getErrorStream(), "utf-8"));
}
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
System.out.println(" return: " + sb.toString());
return sb.toString()
}
Теперь я получаю следующее сообщение об ошибке:
return: { "httpCode":"401", "httpMessage":"Unauthorized", "moreInformation":"Authentication Failure" }
Я не могу решить это в течение длительного времени. Пожалуйста, сообщите мне, если я что-то упустил или нет.