Content-Type为x-www-form-urlencoded时如何正确发送请求数据?
正确实现方案
错误原因
- 手动拼接
x-www-form-urlencoded格式的请求体没有做URL编码,参数中如果包含中文、特殊符号(&/=/空格等)会导致服务端解析参数失败 - 嵌套结构的字段值你用反引号直接拼接的格式不符合要求,若接口要求该类字段为JSON结构,需要先序列化为标准JSON字符串
- Dart的http库原生支持该格式请求,无需手动拼接字符串,传Map类型的body会自动完成编码、拼接操作,还会自动添加正确的Content-Type请求头
实现代码
首先确保你已经导入了所需依赖:
import 'dart:convert'; import 'package:http/http.dart' as http;
具体请求代码:
// 生成各语言对应的JSON格式字符串 final krDesc = jsonEncode({"title": titleKr, "context": contextKr}); final enDesc = jsonEncode({"title": titleEn, "context": contextEn}); final jpDesc = jsonEncode({"title": titleJp, "context": contextJp}); final chDesc = jsonEncode({"title": titleCh, "context": contextCh}); // 构造表单参数Map final params = <String, String>{ "des": div, "kr_desc": krDesc, "en_desc": enDesc, "jp_desc": jpDesc, "ch_desc": chDesc, }; // 发起请求 final response = await http.post( Uri.parse(url), body: params, );
注意事项
如果接口要求嵌套字段不是JSON格式,只需调整对应desc字段的生成逻辑即可,只要保证存入params的是字符串类型,http库都会自动完成URL编码处理,不会出现参数解析错误的问题。
内容的提问来源于stack exchange,提问作者sojinLee
相关产品推荐
相关产品推荐

