惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
V
V2EX
博客园_首页
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
H
Help Net Security
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
D
Docker
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
N
News and Events Feed by Topic
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
A
Arctic Wolf
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
Hacker News: Ask HN
Hacker News: Ask HN
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
T
Troy Hunt's Blog
T
Tenable Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog
T
Threat Research - Cisco Blogs
MyScale Blog
MyScale Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
The GitHub Blog
The GitHub Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) Jenkins for iOS 搭建日记 iOS HOOK 注入与重签名 Xcode 使用 Configuration 来配置不同的项目环境 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task 悄悄的就必须用 XCode 5.1.1 上传了! Objective-Cloud 初体验(1) 掌中站上架小记 NSLoger 上线了 Python Markdown 做语法限制 Nginx + Gunicorn + Django 部署小记 用Shell脚本批量裁剪App Icon各个尺寸 LaunchRocket使用小记 用宏提速NSCoding 2014新年伊始:近期读过的好文推荐 [iOS] stringWithFormat 和 initWithFormat 有何不同? Apache + Flask + mod_wsgi + Koding 部署小记 收集几个Objective-C的HTML解析库 NSMapTable: 不只是一个能放weak指针的 NSDictionary 2013,再见! Emlog到Typecho的迁移工具:emlog2typecho [iOS]给上拉下拉刷新PullToRefresh做本地化 [iOS]代码推荐:大图缩放视图 - Vertigo iOS:hidesBottomBarWhenPushed的正确用法 Xcode 5新的Interface Builder,你准备好了吗? [翻译]如何使用Django创建简单的博客 我的Mac音乐播放器 初识 NSDataDetector Objective-C 计算代码运行时间 WordPress上传文件自动重命名 iOS:仿jing.fm的音乐播放视图 我的啃黑苹果之路 关于 搜索 项目
HTTP Content-type 与 AFNetworking
2014-05-14 · via isaced

这篇文章主要记录一下之前爬过的一个坑,关于使用 AFNetworking 中请求数据和 HTTP 的 Content-type 关系。

在 iOS 端我们常用 JSON 来作为数据传输格式,对于 HTTP 网络通信框架现在也是 AFNetworking 居多,在 AFNetworking 2.0 ,有了比较大的变化,引入了 iOS 7 / Mac OS X 10.9 的 NSURLSession ,而在 AFNetworking 中对 JSON、XML 等数据对象都有良好的支持,在文档中就可以看到新增了 Serialization 对象,我简单画了个图以看得更清晰:

Serialization

试了下百度 FEX 开发的在线脑图工具 kityminder ,并且是开源项目,还真方便,点这里还可以在线查看。

可以看到 Serialization 派生出 AFURLRequestSerializationAFURLResponseSerialization ,分别作为请求数据和接受数据的序列化方式。AFURLResponseSerialization 又派生出好几种响应数据序列化方式,能正确的使用他们将给我们带来极大的方便。

像我们如果用 AFHTTPSessionManager 的话,在初始化后就会设置一个属性 responseSerializer,这就是上图所述的 AFURLResponseSerialization,告诉 AFNetworking 以怎样的方式接受数据,如果后段接口都是标准的 JSON 数据格式,那么很愉快的就选择了 AFJSONResponseSerializer ,在请求成功的 Block 中的responseObject 就会是一个 AFNetworking 帮你解好档的 JSON,也就是一个 NSDictionary对象。

但有时候你是否遇到明明接口是返回的 JSON 数据,可用 AFJSONResponseSerializer 就会报错,错误信息类似:

Request failed: unacceptable content-type: text/html

这就是因为 HTTP 响应头中的 Content-Type 字段对不上号,最简单的方法就是在浏览器的开发者工具中看到:

response header

如果接口返回的 Content-Type 和实际情况不合时,有时候是因为后端开发人员不规范,我更有遇到一套接口中大多都是 JSON 返回,还有个别方法返回纯文本,如:“YES”,这些都是接口开发人员不规范导致的问题,作为 iOS 端,我们有两种解决方案:

  1. 告诉接口开发人员规范写法,你好我好大家好!(推荐)
  2. responseSerializer 使用 AFHTTPResponseSerializer,这样就不能享受 AFNetworking 自带的 JSON 解析功能了,拿到 responseObject 就是一个  Data 对象,需要自己根据需要进行反序列化。

关于 Content-Type ,可能还是有些同学不太清楚的,这是 HTTP 的基础知识,做后端的同学应该得知道。

Content-Type,内容类型,一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 Asp 网页点击的结果却是下载到的一个文件或一张图片的原因。 - via 百度百科

这里还找到一个 Content-Type 对照表:http://tool.oschina.net/commons