我面对谷歌语音API的CORS问题。我需要发送音频文件(POST请求)到
https://www.google.com/speech-api/v2/recognize?xjerr=1&client=chromium&lang=en-US&maxresults=10&pfilter=0&xjerr=1&key=MY_KEY
我还应该指定一个标题Content-Type:audio/l16; rate=44100
,以帮助谷歌语音API正确处理我的请求。
我通过curl尝试了这个请求,它可以工作-我可以收到正确的结果。然而,当我试图通过客户端JavaScript做到这一点,脚本失败的错误
跨域请求阻塞:同源策略不允许读取远程资源https://www.google.com/speech-api/v2/recognize?xjerr=1&client=chromium〈en-US&maxresults=10&pfilter=0&xjerr=1&key=MY_KEYI&output=json。(原因:CORS头'Access-Control-Allow-Origin'丢失).
我知道服务器不包含Acces-Control-Allow-Origin
头。
我的问题是如何执行CORS POST请求谷歌API从我的主机使用纯JavaScript?
我刚刚得到了我的Javascript CORS代码工作做CORS请求谷歌日历API添加电子邮件到日历。遵循它,替换你需要的东西。我使用oAuth2进行身份验证,这是在下面的代码之外进行的,因此"google_access_token"变量已经在下面的函数之外的全局变量中设置:
解释:
*前两行源代码和加载Google api(其中包括XMLHttpRequest CORS)新的XMLHttpRequest()创建CORS对象*requestURL:是API的URL结束点,你应该用你自己的结束点
来替换它*params:是带有你想要传递的数据的JS对象,这同样取决于你使用的API
* json .stringify(params)将JS数据对象转换为json字符串
* xhr。open('POST', requestURL + '?access_token=' + encodeURIComponent(google_access_token), true)初始化请求,注意到我是如何在编码后附加access_token的
* xhr.setRequestHeader ('Content-Type', 'application/json'):设置http内容类型,指定我以json格式传递数据
*为onload和oneerror事件添加响应处理程序
*xhr.send(paramsjasonString),最后发送数据这里有一个指向Google Client API for Javascript页面的链接,其中解释了CORS的工作原理。不幸的是,它的POST示例太简单了,所以我不得不花一些时间来弄清楚如何发送更复杂的数据的细节。
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
gapi.load('auth2', function() {
// Library loaded.
});
function gapiACL() {
var xhr = new XMLHttpRequest();
var requestURL = 'https://www.googleapis.com/calendar/v3/calendars/87sertf1v9os5if1cju785e4@group.calendar.google.com/acl';
var params = {role: "writer",
scope: {
type: "user",
value: "rosamesarina@gmail.com"
}
};
var paramsjasonString = JSON.stringify(params); // convert the javascript object to a Json string
console.log("paramsjasonString = " + paramsjasonString);
xhr.open('POST', requestURL + '?access_token=' + encodeURIComponent(google_access_token), true );
// Specify the http content-type as json
xhr.setRequestHeader(
'Content-Type', 'application/json');
// Response handlers
xhr.onload = function() {
var responseText = xhr.responseText;
console.log(responseText);
// process the response.
};
xhr.onerror = function() {
console.log('There was an error!');
};
xhr.send(paramsjasonString);
}