You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Get请求在Postman正常但Flutter中报400错误,求解决

解决Flutter中GET请求带JSON体返回400错误的问题

问题原因

HTTP规范中不推荐GET请求携带请求体,Flutter官方的http包会默认忽略GET请求的body字段,导致后端无法接收到JSON数据,从而返回400 Bad Request(提示无JSON令牌、缺少signIn字段)。而Postman作为测试工具,允许发送带body的GET请求,所以能正常运行。

解决方案

1. 验证请求体格式正确性

首先确认userData.toJsonLogin()返回的是合法的JSON字符串:

import 'dart:convert';

// 若toJsonLogin()返回的是Map类型,必须转为JSON字符串
final body = jsonEncode(userData.toJsonLogin()); 
print(body); // 检查输出是否为类似 {"signIn": "xxx"} 的合法JSON

2. 使用底层HttpClient发送请求

替换http包的请求方式,改用dart:io中的HttpClient(不会忽略GET请求的body):

import 'dart:io';
import 'dart:convert';

// 发送请求的代码块
final body = jsonEncode(userData.toJsonLogin()); // 确保是JSON字符串
final token = '你的Bearer Token';

var client = HttpClient();
try {
  var request = await client.getUrl(Uri.parse('https://192.168.0.128/api/Profile'));
  // 设置请求头
  request.headers.set('Accept', '*/*');
  request.headers.set('Authorization', 'Bearer $token');
  request.headers.set('Content-Type', 'application/json');
  // 写入请求体
  request.write(body);
  
  var response = await request.close();
  if (response.statusCode == 200) {
    var responseContent = await response.transform(utf8.decoder).join();
    print(responseContent);
  } else {
    var errorContent = await response.transform(utf8.decoder).join();
    print('错误状态码: ${response.statusCode}, 错误内容: $errorContent');
  }
} finally {
  client.close(); // 记得关闭客户端
}

3. 对比Postman请求细节

如果问题依旧,用抓包工具(如Charles)对比Postman和Flutter请求的以下内容,确保完全一致:

  • 请求方法(GET)
  • 请求头(尤其是Authorization、Content-Type)
  • 请求体的JSON格式和内容

内容的提问来源于stack exchange,提问作者Huzefa zeenwala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:33:13