Flutter连接PHP MySQL数据库遇Connection refused错误,Postman可正常访问
Flutter连接PHP后端出现Connection Refused但Postman正常的解决方案
问题描述
Flutter应用调用PHP后端接口时抛出Connection refused异常,但通过Postman测试同一接口完全正常,相关Crud类代码如下:
import 'dart:convert'; import 'package:dartz/dartz.dart'; import 'package:ecommercegetx/core/class/statusrequest.dart'; import 'package:ecommercegetx/core/functions/checkinternet.dart'; import 'package:http/http.dart' as http; class Crud { Future<Either<StatusRequest, Map>> postData(String linkurl, Map data) async { var check = await checkInternet(); print("###################################$check"); print("###################################1$linkurl"); print("###################################2$data"); if (await checkInternet()) { print("checkedf"); var response = await http.post(Uri.parse(linkurl), body: data); print("########################----33333333$response"); if (response.statusCode == 200 || response.statusCode == 201) { Map responsebody = jsonDecode(response.body); return Right(responsebody); } else { return const Left(StatusRequest.serverfailure); } } else { return const Left(StatusRequest.offlinefailure); } } }
常见排查方向及解决办法
本地服务器地址错误
若在本地运行PHP服务器(如XAMPP/WAMP),Flutter模拟器/真机无法直接通过localhost或127.0.0.1访问:- 安卓模拟器:替换为
http://10.0.2.2:端口号(10.0.2.2是模拟器映射到主机的回环地址) - iOS模拟器:可直接用
localhost,但真机需使用主机的局域网IP - 真机测试:确保设备和主机在同一局域网,使用主机的局域网IP(如
http://192.168.1.100:80)
- 安卓模拟器:替换为
服务器绑定地址限制
检查PHP服务器配置(如Apache的httpd.conf),确保监听地址为0.0.0.0而非127.0.0.1,允许局域网设备访问:Listen 0.0.0.0:80防火墙/端口拦截
主机防火墙可能阻止了Flutter设备对PHP服务器端口的访问,可临时关闭防火墙测试,或在防火墙上添加对应端口的入站规则(如80、8080等)。安卓HTTP明文请求限制
若后端接口使用HTTP而非HTTPS,安卓9及以上默认禁止明文网络请求,需在android/app/src/main/AndroidManifest.xml中添加配置:<application ... android:usesCleartextTraffic="true"> ... </application>请求参数/格式不一致
确认Flutter的请求参数和Postman完全匹配:- 检查
data中的键名是否和后端接口要求的拼写、大小写完全一致 - 核对请求Content-Type:Postman若使用
form-data,Flutter默认是application/x-www-form-urlencoded,若后端仅接受form-data,需调整请求头和参数格式。
- 检查
内容的提问来源于stack exchange,提问作者Mohammed Malek
相关产品推荐
相关产品推荐

