如何通过 AFNetworking API 调用使用 gzip 解压?

Posted

技术标签:

【中文标题】如何通过 AFNetworking API 调用使用 gzip 解压?【英文标题】:how to use gzip decompression with AFNetworking API call? 【发布时间】:2014-09-13 06:13:39 【问题描述】:

我在我的项目中使用 AFNetworking 库。最近我听说了 gzip 数据压缩,它是由 NSURLConnection 类中的默认值提供的,并减少了大型 json 响应的时间和加载时间,因此 AFNetworking 可能具有该功能,因为它在 NSURLConnection 之上工作。

但我不知道如何通过 AFNetworking 从 php API 获取 gzip 压缩的 json 响应。

当 Json 响应文件大小超过 100kb+ 时,我需要这种技术。

【问题讨论】:

【参考方案1】:

如果服务器支持gzip,它可能要求客户端要求服务器响应启用gzip。要让服务器使用gzip,您添加具体 "Accept-Encoding" 标头到您的请求。例如,您可以使用以下代码行来执行此操作:

// Get one that serializes your requests, 
// for example from your AFHTTPSessionManager subclass
AFHTTPRequestSerializer <AFURLRequestSerialization> *requestSerializer = ...
[requestSerializer setValue:@"gzip, identity" forHTTPHeaderField:@"Accept-Encoding"];

"Accept-Encoding" 标头必须包含 gzip,而 identity 可能不是必需的。

【讨论】:

【参考方案2】:

如果您在 AFNetworking 中使用基于 NSURLSession 的 API,它将自动包含在 here 中。因此,您无需执行任何操作。

请注意,您可能看不到请求的应用日志中的标头值,但如果服务器支持 gzip,您可以检查响应的标头以确认此行为。

【讨论】:

以上是关于如何通过 AFNetworking API 调用使用 gzip 解压?的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 回调 - 委托还是通知?

如何通过 AFNetworking 和 NSUrlSession 调用 SOAP Web 服务

无法将令牌附加到 API 调用(基本身份验证、AFNetworking)

AFNetworking 同步调用(like/unlike)

如何通过 AFNetworking 传递 facebook 访问令牌

AFNetworking 序列化正斜杠使 JSON 有效负载无效