因此,我得到了Flutter应用程序的模板,该应用程序使用HTTP get请求从网站检索其所有数据。
我有以下获取餐厅列表的方法:
Future<Stream<Restaurant>> getNearRestaurants(LocationData myLocation, LocationData areaLocation) async {
String _nearParams = '';
String _orderLimitParam = '';
if (myLocation != null && areaLocation != null) {
_orderLimitParam = 'orderBy=area&limit=5';
_nearParams = '&myLon=${myLocation.longitude}&myLat=${myLocation.latitude}&areaLon=${areaLocation.longitude}&areaLat=${areaLocation.latitude}';
}
final String url = '${GlobalConfiguration().getString('api_base_url')}restaurants?$_nearParams&$_orderLimitParam';
final client = new http.Client();
final streamedRest = await client.send(http.Request('get', Uri.parse(url)));
return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).expand((data) => (data as List)).map((data) {
return Restaurant.fromJSON(data);
});
}
但是,当我将模板的 url 变量替换为自己的网站时,该应用程序卡住了,因为它无法从我的网站检索相同的信息。
我可能会缺少什么?问题出在代码或网站上吗?
更新1:
我用try / catch块将其包围,这给了我一个“错误的证书例外”。。这可能是因为我的网站没有SSL证书,所以我为自认证网站的HttpClient添加了一个例外:
bool _certificateCheck(X509Certificate cert, String host, int port) =>
host == '<domain>';
HttpClient client2 = new HttpClient()..badCertificateCallback = (_certificateCheck);
HttpClientRequest request = await client2.getUrl(Uri.parse(url));
var response = await request.close(); // sends the request
// transforms and prints the response
response.transform(Utf8Decoder()).listen(print);
此代码在我需要从其获取JSON数据的页面上显示了错误404:未找到。
我还安装了邮递员,并使用GET语句检查了我的网站,找到了我尝试在上面发布的颤振代码中检索到的相同餐馆列表,并看到以下内容: Postman GET screenshot
更新2:
所以我在网站上配置了SSL,问题仍然存在。我尝试通过邮递员测试GET请求,它也返回错误404页面。我尝试浏览服务器文件和laravel日志,但没有成功。
好像我的网站无法路由到我的API文件夹中的特定页面。但是它们都是在api.php中定义的。