Flutter中如何发送携带JSON请求体的GET HTTP请求
Flutter 发送携带JSON请求体的GET请求实现方案
Flutter 完全支持该非标准HTTP请求场景,你原有代码的核心逻辑成立,只需要补全缺失的配置即可,也可以使用兼容性更好的网络库实现。
基于官方http包的修正方案
你原有代码存在两处问题:
- 定义了请求头Map但未赋值给请求对象,导致Content-Type等配置未生效
- 直接给
request.body赋值字符串时,库默认使用text/plain编码,容易出现body解析异常
修正后的可运行代码如下:
import 'package:http/http.dart' as http; import 'dart:convert'; String urlGetkey = "https://pa.me/transactions/card_hash_key"; Map<String, String> userHeader = { "Content-type": "application/json", "Accept": "application/json", "User-Agent": "curl/7.64.", }; var _body = jsonEncode({"api_key": zulu}); var request = http.Request('GET', Uri.parse(urlGetkey)); // 绑定请求头 request.headers.addAll(userHeader); // 直接传入编码后的字节数组,规避默认编码问题,稳定性最高 request.bodyBytes = utf8.encode(_body); final streamedResponse = await request.send(); var response = await http.Response.fromStream(streamedResponse); // 后续直接处理response即可
备选方案:使用Dio库实现
如果上述代码出现body被底层过滤丢失的情况(部分设备的系统网络组件会默认拦截GET请求的body),可以换用Dio网络库实现,兼容性更好:
- 先在
pubspec.yaml添加依赖:
dependencies: dio: ^5.4.0
- 请求代码示例:
import 'package:dio/dio.dart'; final dio = Dio(); Response response = await dio.request( "https://pa.me/transactions/card_hash_key", data: {"api_key": zulu}, options: Options( method: "GET", headers: { "Content-type": "application/json", "Accept": "application/json", "User-Agent": "curl/7.64.", }, ), );
提示:该用法不符合HTTP通用规范,仅适用于服务端无法调整的特殊兼容场景,常规业务开发请避免使用。
内容的提问来源于stack exchange,提问作者user3358125
相关产品推荐
相关产品推荐

