Flutter POST请求Android端x-auth-token被截断至1024字节问题
解决Flutter Android端响应头x-auth-token被截断问题
问题原因
Android平台原生的HttpURLConnection默认限制单个响应头的值长度为1024字节,Flutter官方http包在Android环境下底层依赖该实现,所以会导致超长的x-auth-token被截断,而iOS和Web平台没有这个限制,因此能获取完整token。
解决方案
方案1:改用Dio网络库
Dio在Android端底层使用OkHttp,不存在响应头长度限制问题,是最便捷的解决方式。
- 先在
pubspec.yaml添加依赖:
dependencies: dio: ^5.4.0 # 请使用最新版本
- 替换原有请求代码:
import 'package:dio/dio.dart'; ... String url = 'http://localhost:8080/backoffice/login'; final dio = Dio(); try { final response = await dio.post( url, options: Options(headers: {"Content-Type": "application/json"}), // 如果需要传请求体,添加data参数:data: yourRequestBodyMap ); String? token = response.headers.value('x-auth-token'); print(token); // 此时能获取完整token } catch (e) { // 处理异常 } ...
方案2:调整服务器端返回逻辑
如果无法修改客户端,可以让服务器将x-auth-token的内容放到响应体中,客户端从响应体解析完整token,比如:
// 假设响应体是{"token": "完整的token字符串"} final responseData = jsonDecode(response.body); String token = responseData['token'];
方案3:替换Android端默认Http客户端(进阶)
通过自定义Flutter的Http客户端,改用OkHttp替代HttpURLConnection,但需要编写Android原生代码或使用第三方适配包,步骤相对繁琐,推荐优先使用方案1。
内容的提问来源于stack exchange,提问作者Romeo Velloni
相关产品推荐
相关产品推荐

