HTTP请求中的Content-Type

Content-Type代表发送的实体数据的数据类型,包括客户端发送的实体数据和服务端返回的实体数据(在response header和request header中都存在)。

常用的Content-Type

  1. application/json
    代表发送的实体数据的数据类型是JSON数据,如:{"title":"test","sub":[1,2,3]}
  2. application/x-www-from-urlencoded
    代表发送的实体数据的数据类型是键值对,如: key1=val1&key2=val2

iOS开发中使用AFN设置Content-Type

1.设置发送数据类型

我们在发送请求数据的时候需要告诉服务器我们的数据是什么类型的

  (lldb) po manager.requestSerializer
<AFHTTPRequestSerializer: 0x600003124a80>

(lldb) 

我们通过打印可以看到AFN默认的requestSerializer是AFHTTPRequestSerializer类型。
我们可以在请求头里设置Content-Type

  [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

以上代码代表我们发送的请求数据是键值对类型的。(我发现设置为AFHTTPRequestSerializer类型和设置Content-Type为application/x-www-form-urlencoded的效果是一样的)

2.设置接收数据类型

我们还可以使用AFN设置我们可接收的数据类型。


   (lldb) po manager.responseSerializer.acceptableContentTypes
{(
"text/javascript",
"application/json",
"text/json"
)}

(lldb) 

通过打印可以看到AFN默认能接收是text/javascript、application/json、text/json这三种数据类型,如果服务器给我们返回的是JSON数据类型,那么AFN就能自动帮我们把JSON数据解析下来。

  (lldb) po manager.responseSerializer
<AFJSONResponseSerializer: 0x600003036820>

(lldb) 

通过打印我们可以看到AFN默认的responseSerializer是AFJSONResponseSerializer类型,即JSON数据类型。而我们如果使用了AFHTTPRequestSerializer那么manager.responseSerializer.acceptableContentTypes就被置为了nil,此时返回的JSON数据是二进制形式的,需要我们自己进行解析。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容