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

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网络库实现,兼容性更好:

  1. 先在pubspec.yaml添加依赖:
dependencies:
  dio: ^5.4.0
  1. 请求代码示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:45:48