4

我正在尝试使用 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 请求并收到: 在此处输入图像描述 我做错了什么?我应该修复什么?谢谢!

亚马逊文档:链接
请不要建议我使用 SDK!


我读了这个这个这个这个这个,仍然什么都不懂。

  1. 我知道我的 secretKey 是秘密的,我需要使用加密。
  2. 我需要像这里描述的那样做请求,但我不明白如何提出自己的请求......我的参数:,,,,,,,,,, ......以及method=POST如何使用OkHttp 发出这个请求?请帮忙!host=polly.us-west-2.amazonaws.comendpoint=https://polly.us-west-2.amazonaws.com/v1/speechregion=us-west-2content-type=application/jsonbody of post request={...}accessKey=...secretKey=...
4

1 回答 1

2

addHeader("Authorization", "AWS <accessKey>:<secretKey>")从未在 AWS 上完成。您的密钥是secret

请求通过签名进行身份验证,使用基于您的密钥的一系列 HMAC-SHA 迭代。

不喜欢使用 SDK 是有正当理由的,但您需要阅读并理解生成签名的文档。

当您使用 AWS 命令​​行界面 (AWS CLI) 或 AWS 开发工具包之一向 AWS 发出请求时,这些工具会使用您在配置工具时指定的访问密钥自动为您签署请求。当您使用这些工具时,您不需要自己学习如何签署请求。但是,当您手动创建对 AWS 的 HTTP 请求时,您必须自己对请求进行签名。

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

从上面的链接开始,详细解释了签名过程。

所有地区的所有服务都支持签名版本 4。

于 2017-06-27T00:39:16.443 回答