Flutter如何发送携带XML格式请求体的POST请求
Flutter 发送XML格式POST请求实现方案
第一步:添加依赖
在项目的pubspec.yaml中添加对应依赖:
dependencies: flutter: sdk: flutter http: ^1.1.0 # 可替换为当前最新稳定版本 # 如需结构化生成XML可保留xml依赖 xml: ^6.5.0
执行flutter pub get完成依赖安装。
第二步:构造请求并发送
有两种方式构造XML请求体,可根据需求选择:
方式1:直接拼接XML字符串(适合结构固定的场景)
import 'package:http/http.dart' as http; import 'dart:convert'; Future<void> sendXmlRequest() async { // 拼接XML请求内容,和Postman中使用的内容保持完全一致 final xmlBody = '''<?xml version="1.0" encoding="UTF-8"?> <p:serviceRequest xmlns:p="http://..." xmlns:xsi="http://..." xsi:schemaLocation="http://... api.xsd"> <info1>...</info1> <infoN>...</infoN> </p:serviceRequest>'''; // 替换为你的接口完整请求地址 final requestUrl = Uri.parse('你的接口基础URL+接口路径'); // 发送POST请求,请求头配置和Postman保持完全一致 final response = await http.post( requestUrl, headers: { 'Content-Type': 'application/xml; charset=utf-8', // 其他接口需要的请求头,比如鉴权token、Accept等,完全复制Postman中的配置即可 }, // 用UTF8编码避免特殊字符、中文乱码 body: utf8.encode(xmlBody), ); // 处理响应结果 if (response.statusCode == 200) { final responseContent = utf8.decode(response.bodyBytes); // 解析响应的XML内容即可 print('请求成功:$responseContent'); } else { print('请求失败,状态码:${response.statusCode},错误信息:${utf8.decode(response.bodyBytes)}'); } }
方式2:用xml库结构化生成(适合动态生成XML的场景)
可以避免手动拼接出现的标签闭合错误、命名空间配置错误:
import 'package:xml/xml.dart'; // 生成XML内容 final xmlBuilder = XmlBuilder(); xmlBuilder.processing('xml', 'version="1.0" encoding="UTF-8"'); xmlBuilder.element( 'p:serviceRequest', namespaces: { 'http://...': 'p', 'http://www.w3.org/2001/XMLSchema-instance': 'xsi', }, attributes: { 'xsi:schemaLocation': 'http://... api.xsd', }, nest: () { xmlBuilder.element('info1', nest: 'info1的内容'); xmlBuilder.element('infoN', nest: 'infoN的内容'); }, ); final xmlBody = xmlBuilder.buildDocument().toXmlString(pretty: true);
生成xmlBody后后续请求逻辑和方式1完全一致。
排查注意事项
- 所有请求头参数必须和Postman中的配置100%对齐,包括鉴权字段、自定义头参数
- 确保XML内容的命名空间、标签结构和Postman中测试通过的内容完全一致
- 接口返回解析错误时优先打印返回的原始错误内容,定位是参数问题还是权限问题
内容的提问来源于stack exchange,提问作者patana93
相关产品推荐
相关产品推荐

