0

0

iOS上传XML数据 Alamofire库发送XML请求教程

煙雲

煙雲

发布时间:2026-03-02 05:17:07

|

600人浏览过

|

来源于php中文网

原创

alamofire 发送 xml 请求需手动设置 content-type 为 application/xml 并传入 data 类型的 xml 内容,不能使用 parameters 参数;接收 xml 响应时应避免 responsedecodable,改用 responsestring 后解析。

ios上传xml数据 alamofire库发送xml请求教程

Alamofire 发送 XML 请求时 Content-Type 总是被忽略

Alamofire 默认不识别 XML,Content-Type 不会自动设为 application/xml,哪怕你传了 XML 字符串,它默认按 application/x-www-form-urlencoded 发——后端收不到原始 XML,直接 400 或解析失败。

必须手动覆盖请求头:

  • URLRequest 构造请求,再传给 AF.request(_:) ,不能直接传 URL 和参数字典
  • urlRequest.setValue("application/xml", forHTTPHeaderField: "Content-Type")
  • XML 数据得是 Data 类型(不是 String),否则 Alamofire 可能二次编码或截断特殊字符

XML 字符串转 Data 容易出乱码或格式错乱

iOS 上默认用 UTF-8 编码,但 XML 声明里如果写了 <?xml version="1.0" encoding="UTF-8"?>,而实际数据用了其他编码(比如从服务器拉来的旧 XML 含 GBK 字节),data(using: .utf8) 就会返回 nil 或乱码。

安全做法:

  • 确认 XML 源头编码,优先统一用 UTF-8 生成和传输
  • 构造 XML 时别手拼,用 XMLDocumentXMLWriter 类库生成,避免引号、尖括号、CDATA 写错
  • 如果必须用字符串转 Data,加容错:xmlString.data(using: .utf8, allowLossyConversion: true),但要清楚丢失字符的风险

Alamofire 5+ 版本里 request() 不接受 raw body 参数

老教程常写 AF.request(url, method: .post, parameters: xmlData, encoder: URLEncodedFormParameterEncoder()) ——这根本发不出 XML。parameters 是给表单或 JSON 用的,传 Data 会被当成键值对 key 处理,最终发出去的是空或非法 body。

PhotoG
PhotoG

PhotoG是全球首个内容营销端对端智能体

下载

正解是绕过高层封装:

  • 先创建 var urlRequest = URLRequest(url: yourURL)
  • urlRequest.httpMethod = "POST"
  • urlRequest.httpBody = xmlData
  • urlRequest.setValue("application/xml", forHTTPHeaderField: "Content-Type")
  • 再调用 AF.request(urlRequest)

服务端返回 XML 但 Alamofire 自动解析成 JSON 导致崩溃

有些后端不管返回什么内容,都设 Content-Type: application/xml,但 Alamofire 的 responseDecodable 默认尝试 JSON 解析,遇到 XML 标签就抛 JSONSerialization error,错误信息像 Invalid value around character 0

必须显式指定响应处理方式:

  • responseString() 拿原始文本,再用 XMLDocument(data: ..., options: ...) 解析
  • 不要用 responseDecodable,除非你写了专门适配 XML 的 Decodable 扩展(极少见且维护成本高)
  • 检查响应头:如果后端返回 text/xml 而非 application/xml,也要同步改 setValue 的值,否则可能被某些中间件拦截

XML 的边界其实很脆:编码、声明、空格、命名空间、CDTD,任一环节不对,整条链路就静默失败。别信“发过去就行”,每次都要抓包看真实请求体和响应体长什么样。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

181

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

224

2025.12.18

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

450

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

326

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1936

2024.04.01

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

24

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 19.5万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.9万人学习

Uniapp180分钟快速入门
Uniapp180分钟快速入门

共25课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号