【问题标题】:How to make HTTP request to In Flutter Web如何向 In Flutter Web 发出 HTTP 请求
【发布时间】:2019-10-02 00:24:43
【问题描述】:

我正在尝试使用 Flutter Web。我尝试使用 http 包将我创建的一个简单的 Flutter Web 应用程序连接到 mysql 数据库和 localhost。但是我没有从请求方法返回任何数据。当我试图打印出snaphot.error 时,我得到了这个:XMLHttpRequest error。我在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;

}

【问题讨论】:

  • 您是否在网络浏览器或邮递员上尝试过此请求?让我们看看结果
  • 您找到解决方案了吗?我在这里问过同样的问题:stackoverflow.com/questions/57340929/…
  • 我也遇到了这个问题,我从后端更改了 CORS 政策,然后它就像魅力一样工作!!
  • 你好@HardikBhalala 你在后端做了什么改变?

标签: dart flutter flutter-web


【解决方案1】:

您也可以像这样将下面的代码添加到您的 php 文件中:

<?php
require('connection.php');
header("Access-Control-Allow-Origin: *");
....
code goes here
....
?>

我在 LocalHost 上试过这个,它成功了。

注意:如果您使用的是 nodejs,请安装 cors() 包并使用类似

var express = require('express')
var app = express()
var cors = require('cors')

app.use(cors())

查看CORS package on npmjs

【讨论】:

  • 谢谢,这对我有用。我所有的颤振端 API 调用都通过 php 脚本来“获取”数据。使用此解决方案是否有任何“陷阱”?
  • @Soccerjf 在这里阅读更多内容On Safety of CORS
  • 我应该在哪里添加这个 php sn-p,我的 Flutter Web 项目中没有 .php 文件。我应该把它添加到index.html 吗?
【解决方案2】:

我自己只是偶然发现了这个错误。您正在与 CORS 发生冲突...如果您跟踪底层网络流量,您应该会看到它首先发送了一个 OPTIONS 请求。

要让它暂时“工作”,您可以在关闭 CORS 的情况下启动 Chrome。显然,这不是一个长期的解决方案,但它应该能让你继续前进。你需要的命令是:

open /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir

【讨论】:

  • 我在 Windows 上运行了这个,但这似乎对我仍然不起作用start Chrome --args --disable-web-security --user-data-dir
  • 嗯...不确定。我想知道相同的选项是否适用于 Windows。它确实为我在 Mac 上修复了相同的症状
  • 不适合我。环境:Mac 10.14.6,Chrome 80.0.3987.10
  • open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security 在 MAC 上为我工作!
  • 我正在寻找一个好的方法/长期解决方案。你能解释或链接任何有用的参考资料吗?
【解决方案3】:

我发现并解决了这个问题

访问flutter制作的网站基本上是调用JS脚本

对于任何允许访问脚本的网站(在我的情况下是我从中访问 api 的另一个网站),您需要提供某种访问权限

在这种情况下是 CORS - 跨域资源共享

将以下代码添加到您的网站.htaccess 文件中

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

添加此现在将授予对您的 Flutter 网站的访问权限,以点击您的 api 的请求

【讨论】:

  • 我在 pubspec.yaml 文件上方添加了 .htaccess 文件,其中包含上述内容,但在 localhost 上运行时仍然出现 CORS 错误
  • htaccess 文件在哪里?
  • 它应该出现在你的文件结构之上
  • 我找不到 .htaccess 文件。
  • 该文件应该存在于您的服务器上,如果不是,则您应该创建一个并粘贴上面显示的内容
猜你喜欢
  • 2019-12-11
  • 2019-10-06
  • 2021-01-27
  • 2018-03-12
  • 2020-08-08
  • 1970-01-01
  • 2019-05-07
  • 2019-02-13
  • 2019-07-09
相关资源
最近更新 更多