我正在尝试从WordPress编辑器中的javascript代码向AWS发送请求,通过AWS认证。我在互联网上学过几个例子,但我总是会犯错误。
const CREDS = {
accessKeyId: "xxx",
secretAccessKey: "xxx"
// region: "eu-west-1"
};
axios(
aws4.sign(
{
host: "polly.eu-west-1.amazonaws.com",
method: "GET",
url:
"https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US",
data: {},
body: {},
path:
"/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US"
},
CREDS
)
).then(res => {
console.log(res);
// ...
});xhr.js:126拒绝设置不安全的标题"Host“setRequestHeader @ xhr.js:126 forEach @ utils.js:238 dispatchXhrRequest @ xhr.js:120 xhrAdapter @ xhr.js:12 dispatchRequest @ dispatchRequest.js:52 Promise.then (异步)请求@ Axios.js:61 react@ bind.js:9 (匿名)@ edit.js:88 Vh @ react-dom.min.js?ver=16.9.0:163 Uh @ver dom.min.js?ver=16.9.0:14Xh @ver dom.min.js?ver=16.9.0:14 af @ver dom.min.js?ver=16.9.0:14 Yh @ver dom.min.js?ver=16.9.0:164 nd @ver dom.min.js?ver=16.9.0:15 nc @ver dom.min.js?ver=16.9.0:15 Of @dom.min.js?ver=16.9.0:38 Ac @ver dom.min.js?ver=16.9.0:39 unstable_runWithPriority @ react.min.js?ver=16.9.0:26 Ma @react dom.min.js?ver=16.9.0:52 Be @ver dom.min.js?ver=16.9.0:119 react.min.js?ver=16.9.0:26@react react.min.js?ver=16.9.0:26=16.9.0:39 xhr.js:126拒绝设置不安全的标题“内容长度”setRequestHeader @ xhr.js:126 forEach @ utils.js:238 dispatchXhrRequest @ xhr.js:120 xhrAdapter @ xhr.js:12 dispatchRequest @ dispatchRequest.js:52 Promise.then (异步)请求@ Axios.js:61 wrap @ bind.js:9 (匿名)@ edit.js:88 Vh @ver dom.min.js?ver=16.9.0:163 Uh @ver dom.min.js?ver=16.9.0:14 Xh @ver dom.min.js?ver=16.9.0:14 af @wrap dom.min.js?ver=16.9.0:14 Yh @ver dom.min.js?ver=16.9.0:164 nd @ver dom.min.js?ver=16.9.0:15 nc @ver dom.min.js?ver=16.9.0:15 Of @ver dom.min.js?ver=16.9.0:38 Ac @react dom.min.js?ver=16.9.0:39 unstable_runWithPriority @ react.min.js?ver=16.9.0:26 Ma @ver dom.min.js?ver=16.9.0:52 Be @ GET dom.min.js?ver=16.9.0:119 xi @GET dom.min.js?ver=16.9.0:39 xhr.js:178 GET https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US 403 (禁止)
有了这个
aws4.sign(
{
service: "polly",
region: "eu-west-1",
method: "GET",
path:
"/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US",
headers: {},
body: "{}"
},
CREDS
)
).then(res => {
console.log(res);
// ...
});isURLSameOrigin.js:57 Uncaught (在承诺中) TypeError:无法读取未定义的at isURLSameOrigin (isURLSameOrigin.js:57) at dispatchXhrRequest (xhr.js:109)在xhrAdapter (xhr.js:12) at dispatchRequest (dispatchRequest.js:52)的属性“协议”
我不明白为什么这么复杂。为什么我做错了?
发布于 2020-03-16 17:22:13
AWS4让我头疼好几天了!我找到了一个使用放大的解决方案。它创建正确的标头
import {Signer} from '@aws-amplify/core';
let request = {
method: 'GET',
url: 'https://polly.eu-west-1.amazonaws.com/v1/voices?Engine=neural&IncludeAdditionalLanguageCodes=no&LanguageCode=en-US',
data: ''
}
let access_info = {
access_key: xxxxx,
secret_key: xxxxxx,
session_token: xxxxx
}
let service_info = {
service: 'polly',
region: 'eu-west-1'
}
//use amplify sign()function to create the signed headers;
let signedRequest = Signer.sign(request,access_info,service_info)
//remove host from header
delete signedRequest.headers['host']
//I normally create an instance if I need to intercept my response or request
var instance = axios.create();
let response = await instance(signedRequest).then(function (response) {
console.log(response);
return response
}).catch(function (error) {
//... handle errors
});我希望这能帮到你
https://stackoverflow.com/questions/60554364
复制相似问题