Я пытаюсь получить ответ для API DescribeFileCaches с помощью HttpsURLConnection в Java. При использовании AWS SDK я могу получить ответ, но при обращении к API с использованием тех же заголовков в Java я получаю 404 - (это возвращенный ответ об ошибке).
Поскольку я новичок в Java HttpsURLConnection, дайте мне знать, если я что-то упускаю в своей работе.
Я скопировал все заголовки из SDK и использовал их здесь. Бесполезно, и я получаю тот же ответ об ошибке.
try {
String url = "https://fsx.us-east-1.amazonaws.com";
/**
* Add host without http or https protocol.
* You can also add other parameters based on your amazon service requirement.
*/
TreeMap<String, String> awsHeaders = new TreeMap<String, String>();
awsHeaders.put("amz-sdk-invocation-id", "9cf0e754-1888-ece2-febe-1c707c7c20cc");
awsHeaders.put("amz-sdk-request", "attempt=1;max=4");
awsHeaders.put("amz-sdk-retry", "0/0/500");
awsHeaders.put("content-length", "2");
awsHeaders.put("content-type", "application/x-amz-json-1.1");
awsHeaders.put("host", "fsx.us-east-1.amazonaws.com");
awsHeaders.put("user-agent", "aws-sdk-java/1.12.433 Windows_10/10.0 OpenJDK_64-Bit_Server_VM/25.352-b08 java/1.8.0_352 kotlin/1.6.20 vendor/Azul_Systems,_Inc. cfg/retry-mode/legacy");
awsHeaders.put("x-amz-date", "20240820T072953Z");
String target = "AWSSimbaAPIService_v20180301.DescribeFileCaches";
awsHeaders.put("x-amz-target", target);
TreeMap<String, String> queryParameters = new TreeMap<String, String>();
AWSV4Auth aWSV4Auth = new AWSV4Auth.Builder("", "")
.regionName("us-east-1")
.serviceName("fsx") // es - elastic search. use your service name
.httpMethodName("POST") //GET, PUT, POST, DELETE, etc...
.canonicalURI("/") //end point
.queryParametes(queryParameters) //query parameters if any
.awsHeaders(awsHeaders) //aws header parameters
.payload("{}") // payload if any
.debug() // turn on the debug mode
.build();
/* Get header calculated for request */
Map<String, String> header = aWSV4Auth.getHeaders();
System.out.println(header.toString());
URL urlobj = new URL(url);
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) urlobj.openConnection();
httpsURLConnection.setRequestMethod("POST");
httpsURLConnection.setDoOutput(true);
for(String headerName : header.keySet()) {
httpsURLConnection.setRequestProperty(headerName, header.get(headerName));
}
httpsURLConnection.setRequestProperty("Accept", "application/json");
try (DataOutputStream wr = new DataOutputStream(httpsURLConnection.getOutputStream())) {
wr.write("{}".getBytes());
wr.flush();
wr.close();
}
//httpsURLConnection.setRequestProperty("Accept", "text/xml");
if (httpsURLConnection.getResponseCode() != 200) {
System.out.println("http response code is " + httpsURLConnection.getResponseCode() +" - " + httpsURLConnection.getResponseMessage());
InputStream errorStream = httpsURLConnection.getErrorStream();
if (errorStream != null) {
BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
String errorResponse;
while ((errorResponse = errorReader.readLine()) != null) {
System.out.println(errorResponse);
}
errorReader.close();
}
} else {
InputStream in = httpsURLConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(reader);
String response = null;
String line = (response = bufferedReader.readLine());
while(line != null) {
line = bufferedReader.readLine();
if (line != null) {
response += line;
}
}
System.out.println(response);
}
} catch (Exception e) {
e.printStackTrace();
}
Агап
Вопрос задан18 августа 2024 г.