Как получить ответ от API Amazon Fsx DescribeFileCaches?

Я пытаюсь получить ответ для 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 г.

1 Ответ

Ваш ответ

Загрузить файл.