Maison  >  Questions et réponses  >  le corps du texte

Comment publier des données de l'application ionique sur Google Cloud Function

J'essaie d'envoyer des données à Google Cloud Functions à partir d'une application ionique mais j'obtiens toujours l'erreur suivante :

L'accès à XMLHttpRequest sur 'https://xxxxxxxxxxxxxxx.cloudfunctions.net/upload_data' depuis l'origine 'http://localhost:8100' a été bloqué par la politique CORS : l'accès interdit le type de contenu du champ d'en-tête de demande - dans la réponse de contrôle en amont Contrôle- Autoriser les en-têtes.

La même erreur s'affiche même si l'en-tête de la requête est supprimé. Toute aide serait grandement appréciée, merci.

Mon code dactylographié :

var httpheader = new HttpHeaders();
    
    httpheader.append('Accept','application/json');
    httpheader.append('Content-Type','application/json');
  
     let data = {"testbody":"this is test data"};
      
      await this.http.post('https://xxxxxxxxxxxxxxxx.cloudfunctions.net/upload_data',data
      ,{headers:httpheader}).subscribe((resp)=>{
          console.log(resp);   
        });

Fonction cloud python :

def hello_world(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
    """
    if request.method == 'OPTIONS':
        headers={'Access-Control-Allow-Origin':'*',
                'Access-Control-Allow-Methods':'GET',
                'Access-Control-Allow-Headrs':'Content-Type',
                'Access-Control-Max-Age':'3600'
        }
        return ('',204,headers)
    headers={'Access-Control-Allow-Origin':'*'}
    
    request_json = request.get_json(silent=True)
    request_args = request.args
    
    if request_json and 'testbody' in request_json:
        testname = request_json['testbody']
    elif request_args and 'testbody' in request_args:
        testname = request_args['testbody']
    else:
        testname = 'Nothing sent'
    return (jsonify(testname),200,headers)

P粉439804514P粉439804514258 Il y a quelques jours402

répondre à tous(1)je répondrai

  • P粉763662390

    P粉7636623902024-02-05 00:09:52

    CORS相关配置需要在服务器端代码中完成。从您的问题中,我看到您在 Python 中使用 Flask 框架。所以需要在Flask中配置CORS est la suivante :

    Installez flask-cors en exécutant -

    pip install -U flask-cors

    Considérez l'exemple de code de point de terminaison suivant :

    from flask import Flask
    from flask_cors import CORS, cross_origin
    app = Flask(__name__)
    cors = CORS(app)
    app.config['CORS_HEADERS'] = 'Content-Type'
    
    @app.route("/")
    @cross_origin()
    def helloWorld():
      return "Hello, cross-origin-world!"

    Mise à jour

    Dans Production环境中,请禁止禁止使用Access-Control-Allow-Origin':'*'。相反,您应该 whitelist votre nom de domaine. En savoir plus à ce sujet ici et ici.

    De plus, si vous utilisez Ionic with Capacitor, je vous recommande d'utiliser le plugin HTTP Ionic 与 Capacitor 一起使用,我建议使用 Http 插件。如果可能,您还可以编写自己的 自定义插件 来使用底层操作系统 平台特定的 API 实现网络调用 natively. Si possible, vous pouvez également écrire votre propre plugin personnalisé pour utiliser l'implémentation de l'API spécifique à la plate-forme du système d'exploitation sous-jacent

    réseau

    appelle nativement car ceci empêche tout problème lié à CORS de se produire.

    Lien de référence :

    Configuration du flacon CORS

    Autoriser les points de terminaison Flask à utiliser CORS🎜🎜

    répondre
    0
  • Annulerrépondre