【问题标题】:Amazon Polly API亚马逊波利 API
【发布时间】:2017-06-26 23:32:58
【问题描述】:

我正在尝试使用 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 请求 on this service 并收到以下信息: 我究竟做错了什么?我应该修复什么?谢谢!

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


我读了thisthisthisthisthis,但仍然一无所知。

  1. 我了解我的 secretKey 是机密的,我需要使用加密。
  2. 我需要像here 描述的那样做请求,但我不明白如何提出自己的请求... 我的参数:method=POSThost=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=... ..... 以及如何使用 OkHttp 发出这个请求?请帮忙!

【问题讨论】:

  • 那么,您究竟为什么不想使用 SDK?

标签: java amazon-web-services okhttp3 amazon-polly


【解决方案1】:

addHeader("Authorization", "AWS &lt;accessKey&gt;:&lt;secretKey&gt;")从未在 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。

【讨论】:

  • 通读所有说明。这个过程并不难,但是有很多信息需要消化,这也是很多人推荐SDK的原因。在文档中,您将找到对Signature V4 Test Suite 的引用,它向您显示了在签名过程中获得的中间结果。您最终会得到一个有效的 Authorization 标头,您将把它添加到请求中,但它不包含您的密钥。
  • aws4_request 是一个静态字符串,它永远不会改变。用polly 替换iam 并相应地设置区域。要签名的字符串的最后一行is the sha256 of the canonical request。这些都有记录。
猜你喜欢
  • 2016-11-26
  • 2022-12-03
  • 2012-12-24
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多