Postman请求返回200但Flutter中返回404问题排查求助
排查方案与解决代码
1. 补全请求头(重点检查User-Agent)
Kaspi接口大概率会校验请求头中的User-Agent,Postman默认的User-Agent与Flutter中http/Dio默认值差异极大,这是导致404最常见的原因。直接复用Postman的请求头参数即可解决:
Dio示例代码
import 'package:dio/dio.dart'; void fetchKaspiOrder() async { final dio = Dio(); try { final response = await dio.get( 'https://kaspi.kz/shop/api/v2/orders', queryParameters: {'filter[orders][code]': '274556253'}, options: Options( headers: { 'X-Auth-Token': '你的有效Token', 'User-Agent': 'PostmanRuntime/7.32.3', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', }, ), ); print(response.statusCode); print(response.data); } catch (e) { print(e.toString()); } }
http包示例代码
import 'package:http/http.dart' as http; void fetchKaspiOrder() async { final url = Uri.https( 'kaspi.kz', '/shop/api/v2/orders', {'filter[orders][code]': '274556253'}, ); final response = await http.get( url, headers: { 'X-Auth-Token': '你的有效Token', 'User-Agent': 'PostmanRuntime/7.32.3', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', }, ); print(response.statusCode); print(response.body); }
2. 避免手动拼接URL参数
不要直接把filter[orders][code]拼在URL字符串里,必须用框架自带的参数传递方式(Dio的queryParameters、http包的Uri参数构造),确保方括号等特殊字符被正确编码,避免接口无法识别参数。
3. 检查Cookie是否需要携带
如果Postman之前登录过Kaspi接口,会自动保存会话Cookie,而Flutter请求默认不会携带。可以在Postman的请求头中复制Cookie字段内容,添加到Flutter请求头中:
headers: { // ...其他请求头 'Cookie': '复制Postman中的Cookie内容', }
4. 确认请求方法完全一致
确保Postman使用的是GET请求,Flutter代码中也必须对应使用GET,禁止误写成POST、PUT等其他方法。
5. 排查网络环境差异
如果Flutter运行在模拟器/真机,检查是否和Postman所在电脑处于同一网络,是否有代理、VPN导致请求被拦截或路由错误。可尝试关闭代理,切换为手机流量测试。
内容的提问来源于stack exchange,提问作者GanzYe
相关产品推荐
相关产品推荐

