J'essayais mes mains sur le Web flottant. J'ai essayé de connecter une simple application Web Flutter que j'ai créée à la base de données mysql et à localhost à l'aide du package http. Cependant, je ne reçois aucune donnée renvoyée par la méthode de demande. Lorsque j'ai essayé d'imprimer snaphot.error
, J'ai obtenu ceci: XMLHttpRequest error
. J'ai cette méthode dans une FutureBuilder()
getMethod()async{
String theUrl = 'https://localhost/fetchData.php';
var res = await http.get(Uri.encodeFull(theUrl),headers: {"Accept":"application/json"});
var responsBody = json.decode(res.body);
print(responsBody);
return responsBody;
}
Je suis littéralement tombé sur l'erreur moi-même. Vous ne respectez pas CORS ... si vous tracez le trafic réseau sous-jacent, vous devriez voir qu'il envoie d'abord une demande OPTIONS
.
Pour le faire fonctionner temporairement, vous pouvez lancer Chrome avec CORS désactivé. Évidemment, ce n'est pas une solution à long terme, mais cela devrait vous permettre de démarrer. La commande dont vous avez besoin est:
open /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir
Vous pouvez également ajouter le code ci-dessous à votre fichier php comme ceci:
<?php
require('connection.php');
header("Access-Control-Allow-Origin: *");
....
code goes here
....
?>
J'ai essayé cela sur LocalHost et cela a fonctionné
Ce que j'ai découvert et résolu le problème est
Pour accéder à un site Web créé par flutter, vous appelez un script JS
et pour que tout site Web donne accès à un script (qui, dans mon cas, était un autre site Web à partir duquel j'accédais à l'api), vous devez donner une sorte d'autorisation d'accès
Ce qui est dans ce cas est CORS - Cross-Origin Resource Sharing
Ajoutez le code ci-dessous à vos sites Web .htaccess
fichier
<ifModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www.)?(localhost:55538|somedomain.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header always set Access-Control-Allow-Methods: "GET,POST,PUT,DELETE,OPTIONS"
</ifModule>
l'ajout de cela accordera désormais l'accès à votre site Web Flutter pour frapper les demandes à vos API