I am building a web app where the front-end is done with Flutter while the back-end is with Python. GET requests work fine while POST requests get blocked because of CORS, I get this error message:
Access to XMLHttpRequest at 'http://127.0.0.1:8080/signal' from origin 'http://localhost:57765' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Below is my flutter function I used to send GET and POST requests:
Future<dynamic> sendResponse() async { final url = 'http://127.0.0.1:8080/signal'; var data = { "signal": '8', }; var header = { 'Access-Control-Allow-Origin': '*', "Accept": "application/x-www-form-urlencoded, '*'" }; http.Response response = await http.post(Uri.parse(url), body: data, headers: header);//http.post(Uri.parse(url), body: data, headers: header);//http.get(Uri.parse(url)); if (response.statusCode == 200) { print(json.decode(response.body)); return jsonDecode(response.body); //print(json.decode(credentials.body)); } else { print(response.statusCode); throw Exception('Failed to load Entry'); } // var ResponseFromPython = await response.body;//jsonDecode(credentials.body); // return ResponseFromPython; } Below is my Python backend code using Flask:
from flask import Flask,jsonify, request, make_response import json from flask_cors import CORS, cross_origin #declared an empty variable for reassignment response = '' app = Flask(__name__) #CORS(app, resources={r"/signal": {"origins": "*, http://localhost:59001"}}) #http://localhost:52857 #CORS(app, origins=['*']) app.config['CORS_HEADERS'] = ['Content-Type','Authorization'] @app.route("/") def index(): return "Congratulations, it worked" @app.route("/signal", methods = ['POST', 'GET']) #, @cross_origin(origins='http://localhost:57765',headers=['Content-Type','Authorization', 'application/x-www-form-urlencoded','*'], upports_credentials=True)# allow all origins all methods. def multbytwo(): """multiple signal by 2 just to test.""" global response if (request.method=='POST'): # request.headers.add("Access-Control-Allow-Origin", "*") request_data = request.data #getting the response data request_data = json.loads(request_data.decode('utf-8')) #converting it from json to key value pair comingSignal = request_data['signal'] response = make_response(comingSignal, 201)#jsonify(comingSignal*2) response.headers.add('Access-Control-Allow-Origin', '*') response.headers.add('Access-Control-Allow-Methods", "DELETE, POST, GET, OPTIONS') response.headers.add('Access-Control-Allow-Headers", "Content-Type, Authorization, X- Requested-With') return response else: try: #scaler = request.args.get("signal") out = 9 * 2 response = jsonify(out) response.headers.add("Access-Control-Allow-Origin", "*") return response #sending data back to your frontend app except ValueError: return "invalid input xyz" if __name__ == "__main__": app.run(host="127.0.0.1", port=8080, debug=True) Below are the troubleshooting steps I made: -Added the flask_CORS package in python I tried here different combination from using general parameters like CORS(app, resources={r"/signal": {"origins": "*"}}) did not help. Also tried the decorator @cross-origin and did not help
-Added some headers to the response itself to indicate that it accepts cross-origin You see in my python code I tried adding a lot of headers to the response, nothing seem to respond.
-Tried installing an extension in Chrome that by-passes the CORS check I tried the allow CORS and CORS unblock extensions and I used the steps described in this answer: How chrome extensions be enabled when flutter web debugging?. Although these extensions are supposed to add the CORS allow header to the response, I still got the same error.
I still do not fully understand the CORS concept but I tried a lot of work-arounds and nothing works! please help.


