Flutter使用DIO发起POST请求报404错误,Postman测试正常求排查
问题分析与解决方案
你的代码触发404错误的核心原因是请求URL不符合HTTP规范,导致Dio无法正确定位到后端接口,具体修正点如下:
1. 必须添加HTTP/HTTPS协议头
Postman会自动为URL补充协议前缀(如http://),但Dio不会。你的请求URL缺少协议头,导致地址解析错误,无法找到目标资源。
修正后的请求代码示例:
final response = await dio.post( // 补充http协议+对应端口(比如XAMPP默认80端口,根据你的服务器配置调整) "http://127.0.0.1:80/toko_grosir_api/create.php", data: { 'name': '${event.product.nameProduct}', 'price': '${event.product.priceProduct}', 'desc': '${event.product.descProduct}', 'stock': '${event.product.stockProduct}', 'date': '${event.product.dateProduct}', 'category': '${event.product.categoryProduct}' }, options: Options( contentType: Headers.formUrlEncodedContentType, ), );
2. 模拟器/真机访问本地服务器的特殊地址
如果在模拟器或真机上运行Flutter项目,需注意本地服务器的访问地址:
- Android模拟器:
127.0.0.1指向模拟器自身,无法访问电脑的本地服务器,需替换为http://10.0.2.2:80/toko_grosir_api/create.php - iOS模拟器:可直接使用
http://localhost:80/...或http://127.0.0.1:80/... - 真机:确保手机与电脑在同一局域网,使用电脑的局域网IP(如
http://192.168.1.100:80/...),同时关闭电脑防火墙
3. 额外验证项
- 确认PHP服务器(如XAMPP/WAMP)处于运行状态,且
create.php文件路径与URL中的路径完全一致 - 检查服务器端口是否与URL中的端口匹配(比如XAMPP默认是80,若修改过需对应调整)
内容的提问来源于stack exchange,提问作者minusOneXzero
相关产品推荐
相关产品推荐

