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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:00