首页 > 解决方案 > 如何允许 Google AppScript 中的 Cors 标头发出 XMLHttpRequest?

问题描述

我在我doGet的. 当我点击端点从 Python 发出 post 请求时,它确实可以正常工作并按预期工作。doPostappscript

但是当我尝试使用基于 Flutter 的移动应用程序访问相同的 url 时,它会抛出一个 XML 错误。(我怀疑这与CORSING有关)。

当我点击 url 时get request,我得到了正确的响应,但post请求失败。为确保正确配置我的 Post 请求,我创建了一个post request公共 API,它的工作原理非常有魅力。

是否可以添加标题,我可以像这样启用cors:

allowHeaders = {
  "Access-Control-Allow-Origin": "*", // Required for CORS support to work
  "Access-Control-Allow-Credentials": true, // Required for cookies, authorization headers with HTTPS
  "Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale",
  "Access-Control-Allow-Methods": "POST, OPTIONS"
}

这是我的 doPost 请求返回的内容:

ContentService.createTextOutput(JSON.stringify(
    {
      data: isAuthenticated.data,
      error: true, 
      //request: request,
      msg: query.apiKey,
      //paramters:request.parameters
  })).setMimeType(ContentService.MimeType.JSON)

这是我的 python 脚本来获取帖子响应:

requests.post("https://script.google.com/macros/s/AKfycbz7kTROol8u509M_p9pMZ9XRnL-myVjcRQKeb9Etp_OIMPnH640vHf_0Jp2dvvrbto7kOg/exec",
                  json = requestObject)

这是我的颤振功能:

Future<http.Response> createAlbum() async{
  print("Trying to make a post request");
  var result = await http.post(Uri.parse('https://script.google.com/macros/s/AKfycbz7kTROol8u509M_p9pMZ9XRnL-myVjcRQKeb9Etp_OIMPnH640vHf_0Jp2dvRIco7kOg/exec'),
    headers: {"Content-Type": "application/json"},
    body: jsonEncode(<String, dynamic>{
      "apiKey":apiKey,
      "operationType":"register_user",
      "operationData": {
        "email": "shivam@yoptima.com",
        "otp": 318728
      }
    }),
  );
  print("Here is the result: " + result.body);
}

只是为了澄清一些事情:

  1. 获取请求适用于这两个平台。
  2. Post Request 适用于 Python for AppScript。
  3. Post Request 适用于 Flutter 中的任何其他公共 API。
  4. 击中 AppScript API 时,Post Request 不适用于 Flutter。
  5. 我怀疑这与CORS有关。(但不是很确定)。
  6. Flutterhttp库通过XMLHttpRequest.

标签: google-apps-script

解决方案


推荐阅读