CORS POST请求谷歌api与纯js



我面对谷歌语音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);

    }

相关内容

  • 没有找到相关文章

最新更新