How to allow Cors Headers in Google AppScript for making an XMLHttpRequest?

Viewed 217

I have created a doGet and doPost endpoints in my appscript. When I hit the endpoint to make a post request from Python, it does work perfectly and as expected.

But when I try to hit the same url with my Flutter based mobile App, it throws me an XML error. (Which I suspect is related to CORSING).

When I hit the url with get request, I get the right response, but post request is failing. To ensure that my Post request is properly configured, I have made a post request to public API and it worked like charm.

Is it possible to add headers, where I could enable cors like this:

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"
}

Here is what my doPost request returns:

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

Here is my python script to get the post response:

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

And here is my Flutter function:

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);
}

Just to clarify things:

  1. Get Request works for both the platforms.
  2. Post Request works with python for AppScript.
  3. Post Request works for any other public API from flutter.
  4. Post Request doesn't work for Flutter when Hitting AppScript API.
  5. I suspect it to be something to do with CORS. (But not very sure).
  6. Flutter http library makes request via XMLHttpRequest.
0 Answers
Related