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!
Я читал это, это, это, это и это, и до сих пор ничего не понимаю.
- Я понимаю, что мой secretKey является секретным и мне нужно использовать шифрование.
- Мне нужно сделать запрос, как описано здесь, но я не могу понять, как сделать свой собственный запрос... Мои параметры:
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 поддерживается всеми сервисами во всех регионах.