2 votes

Envoyer une requête POST à une fonction Lambda Python via API Gateway à partir de HTML

J'ai une fonction Lambda sur AWS et elle est écrite en Python 3.6 J'ai aussi mon API déployée et le CORS activé pour toutes mes ressources Lorsque je teste le POST depuis la passerelle API AWS, tout fonctionne bien et je reçois le même succès lorsque je le teste depuis Postman, mais lorsque j'essaie de le faire depuis le html hébergé dans mon compartiment S3, ça ne fonctionne pas ! J'essaie de faire la requête de type POST comme ceci :

$.ajax({
  type: 'POST',
  url: 'https://xxxxxxx.execute-api.us-east-1.amazonaws.com/dev/myapp',
  data: '{"fName":"jonas","lName": "Hoda", " Email":"abcd@zxy.net", "Age": 45, "Hight": 190, "Income": 120000}', 
  success: function(data) { alert('data: ' + data); },
  contentType: "application/json",
  dataType: 'json'
});

Mais je reçois toujours la même réponse : L'en-tête 'Access-Control-Allow-Origin' n'est pas présent sur la ressource demandée. L'origine 'http://app.my-real-domain.com' n'est donc pas autorisée à y accéder. La réponse avait un code d'état HTTP de 400.

Que dois-je faire d'autre ? Dois-je éditer quelque chose dans mon API ou dans ma fonction Python ? S'il vous plaît, aidez-moi à résoudre ce problème Merci d'avance ...

1voto

AboJo TheGreat Points 46

D'accord, j'ai trouvé la solution ! Tout d'abord, j'ai essayé toutes les idées que j'ai obtenues ici et rien n'a fonctionné. En fait, la plupart d'entre elles étaient déjà appliquées dans mon projet. J'ai donc essayé de voir si le problème était dans l'API ou dans la requête. J'ai donc désactivé le validateur de requête dans la passerelle API et soudain ça a fonctionné ! La requête POST s'est déroulée sans problème et sans erreurs, et la fonction Lambda à l'arrière-plan a fonctionné, stocké les données dans Dynamo DB et a renvoyé la bonne réponse. J'ai alors modifié le schéma de mon modèle dans la passerelle API en supprimant la partie 'requise' et en l'appliquant à nouveau. Et tout est maintenant en ordre ! Je ne sais pas pourquoi cela a résolu le problème, surtout que j'ai passé en revue les paramètres des dizaines de fois et qu'ils sont passés avec les bons noms et types. De toute façon, je voulais juste partager cela au cas où quelqu'un d'autre aurait ce problème. Merci à tous ceux qui ont essayé de m'aider...

0voto

Abhigna Nagaraja Points 1008

Le CORS ne semble pas être configuré sur votre ressource.

Il y a un assistant sur la console qui vous aide à configurer le CORS sur une ressource. La documentation contient également un guide détaillé http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html sur la manière de configurer le CORS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X