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

Flutter中HTTP Post请求空格转+而非%2B的实现问题

Flutter Post请求中保留+字符(替代空格)的解决方案

要让请求体里的空格直接以+形式发送,而非被编码为%2B,核心是绕过http包的自动编码逻辑,直接构造原始请求体字符串。

具体实现代码

import 'package:http/http.dart' as http;

Future<void> sendSearchRequest() async {
  // 用户输入的内容
  final userInput = "hello world";
  // 手动将空格替换为+
  final encodedInput = userInput.replaceAll(' ', '+');
  // 构造符合要求的请求体
  final requestBody = 'searchword=$encodedInput';

  try {
    final response = await http.post(
      Uri.parse('https://www.example.com/XXXX/XXXX/XXXX'),
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        // 根据需求添加其他请求头,比如User-Agent、Accept等
      },
      body: requestBody, // 直接传递原始字符串,不触发自动编码
    );

    // 处理响应
    if (response.statusCode == 200) {
      print("请求成功:${response.body}");
    } else {
      print("请求失败,状态码:${response.statusCode}");
    }
  } catch (e) {
    print("请求出错:$e");
  }
}

原理说明

Flutter的http.post方法,如果传入的body是Map类型,会自动调用Uri.encodeQueryComponent对参数进行编码——这个方法会把空格转为%20,同时把+转为%2B,导致你手动替换的+被二次编码。

而直接传入String类型的body时,http包会原样发送内容,不会做任何编码处理,这样就能保证hello+world直接出现在请求体中,符合目标服务器的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:22:06