Amazon Polly API

Я пытаюсь использовать Amazon Polly REST API.
Может кто-нибудь, пожалуйста, помогите мне сделать это?
Я использую Java и OkHttp3 и пробовал это:

    String url = "https://polly.us-west-2.amazonaws.com/v1/speech";
    String postBody = "{\"OutputFormat\":\"mp3\",\"Text\":\"Some text to listen\",\"TextType\":\"text\",\"VoiceId\":\"Joanna\"}";

    MediaType mediaType = MediaType.parse("application/json; charset=utf-8");

    OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build();



    Request request = new Request.Builder()
            .url(url)
            .addHeader("Authorization", "AWS <accessKey>:<secretKey>")
            .post(RequestBody.create(mediaType, postBody))
            .build();

    Response response = client.newCall(request).execute();

И получил ответ "403 запрещено". Затем я попытался сделать этот запрос POST онлайн на этом сервисе и получил это: Что я делаю неправильно? Что я должен исправить? Спасибо!

Документы Amazon: ссылка
И, пожалуйста, не предлагайте мне использовать SDK!


Я читал это, это, это, это и это, и до сих пор ничего не понимаю.

  1. Я понимаю, что мой secretKey является секретным и мне нужно использовать шифрование.
  2. Мне нужно сделать запрос, как описано здесь, но я не могу понять, как сделать свой собственный запрос... Мои параметры: method=POST, host=polly.us-west-2.amazonaws.com, endpoint=https://polly.us-west-2.amazonaws.com/v1/speech, region=us-west-2, content-type=application/json, body of post request={...}, accessKey=..., secretKey=........ а как сделать этот запрос используя OkHttp? Пожалуйста помоги!

1 ответ

addHeader("Authorization", "AWS <accessKey>:<secretKey>") никогда не делается на AWS. Ваш секретный ключ является секретным.

Запросы аутентифицируются путем их подписания с использованием серии итераций HMAC-SHA на основе вашего секретного ключа.

Есть веские причины, по которым вы предпочитаете не использовать SDK, но вам необходимо прочитать и понять документацию для создания подписей.

Когда вы используете интерфейс командной строки AWS (CLI AWS) или один из пакетов AWS SDK для отправки запросов в AWS, эти инструменты автоматически подписывают запросы с помощью ключа доступа, который вы указали при настройке инструментов. Когда вы используете эти инструменты, вам не нужно учиться подписывать запросы самостоятельно. Однако, когда вы вручную создаете HTTP-запросы к AWS, вы должны подписывать запросы самостоятельно.

http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html

Процесс подписания объясняется подробно, начиная со ссылки выше.

Подпись Версия 4 поддерживается всеми сервисами во всех регионах.

Другие вопросы по тегам