GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记
2016-03-11 00:00
666 查看
AFNetworking是开源代码排名第一的开源库。
GET请求的请求正文 一般都是明文显示的,携带的数据量小。
POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只是不明文显示,所以我们在有的时候,有的网址你是看不到GET请求的网址有?以及?后面携带的明文请求数据。
抓包工具:网址:
http://www.cnblogs.com/YouXianMing/p/4544824.html
测试的网址:
//
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
//
http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.907501&lon=116.397232&cnt=10
这两个测试的网址,可以点击进去,看看数据。打开抓包工具,可以看到相关的信息:
这里是请求携带的信息。也就是所谓的请求正文。
拷贝GET方法的实现部分,然后相应的修改
对第二个网址进行一个简单的GET请求,这里的警告 是我忘记删除前面不用的引用的指针变量了:
看抓包工具,是Json Text:
但是有时候项目中请求的格式不是JSON Text ,那么我们怎么处理呢?AFNetworking提供给我们的方法 请求序列化 ,在Networking.m中可以找到封装好的方法:
但是我们代码中不是用这个方法,而是直接用原类库中的方法:
当我们这么设置的时候:
那么返回的responseObject就是二进制数据:
然后通过字符串转格式,转为文本格式,返回的就是JSON数据:
如果在之前,请求的回复序列化上 ,直接设置为AFJOSNResponseSerializer 就直接输出的是 JSON数据的文本格式:
如果项目中返回的数据是xml数据,那么可以用这个设置返回的序列格式:
接下来演示一下POST请求:
先打开一个网址链接: http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<
然后抓包:
看的出来这个网页是POST请求,携带的参数就是我随意输入的手机号码。但是在请求的正文看不到后面的 ?以及 ?后面的参数。因为这个POST请求正文隐藏起来了,不设置为明文。
然后我们来用POST请求本文开头提供的那个网址:
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
获取请求参数数据。
Copy Request就能获取mobileCode=18720988888&userID=
但是要注意,这个返回的是xml数据:
如果还是用manager.responseSerializer = [AFJSONResponseSerializer serializer];是会出错的,想试一试可以试试,返回错误是因为,那个网站返回的事xml数据,但是解析序列化用的是json是解析不了的,所以要改为manager.responseSerializer = [AFXMLParserResponseSerializer serializer];就不会出错了:
GET请求的请求正文 一般都是明文显示的,携带的数据量小。
POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只是不明文显示,所以我们在有的时候,有的网址你是看不到GET请求的网址有?以及?后面携带的明文请求数据。
抓包工具:网址:
http://www.cnblogs.com/YouXianMing/p/4544824.html
测试的网址:
//
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
//
http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.907501&lon=116.397232&cnt=10
这两个测试的网址,可以点击进去,看看数据。打开抓包工具,可以看到相关的信息:
这里是请求携带的信息。也就是所谓的请求正文。
1 #import "ViewController.h" 2 #import "AFNetworking.h" 3 4 @interface ViewController () 5 6 @end 7 8 @implementation ViewController 9 10 - (void)viewDidLoad { 11 [super viewDidLoad]; 12 13 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 14 15 16 17 // 设置回复内容信息 这里我们一般需要这个设置,不然我们解析网络的时候会出错 18 manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 19 20 AFHTTPRequestOperation *httpOperation = [manager GET:@"" 21 parameters:nil 22 success:^(AFHTTPRequestOperation *operation, id responseObject) { 23 24 } 25 failure:^(AFHTTPRequestOperation *operation, NSError *error) { 26 27 }]; 28 } 29 30 - (void)didReceiveMemoryWarning { 31 [super didReceiveMemoryWarning]; 32 // Dispose of any resources that can be recreated. 33 } 34 35 @end
拷贝GET方法的实现部分,然后相应的修改
对第二个网址进行一个简单的GET请求,这里的警告 是我忘记删除前面不用的引用的指针变量了:
看抓包工具,是Json Text:
但是有时候项目中请求的格式不是JSON Text ,那么我们怎么处理呢?AFNetworking提供给我们的方法 请求序列化 ,在Networking.m中可以找到封装好的方法:
但是我们代码中不是用这个方法,而是直接用原类库中的方法:
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
当我们这么设置的时候:
//请求的序列化 manager.requestSerializer = [AFHTTPRequestSerializer serializer]; //我们 还可以 请求的 结果 序列化 专业的说法:设置回复的序列化 manager.responseSerializer = [AFHTTPResponseSerializer serializer];
那么返回的responseObject就是二进制数据:
然后通过字符串转格式,转为文本格式,返回的就是JSON数据:
如果在之前,请求的回复序列化上 ,直接设置为AFJOSNResponseSerializer 就直接输出的是 JSON数据的文本格式:
如果项目中返回的数据是xml数据,那么可以用这个设置返回的序列格式:
接下来演示一下POST请求:
先打开一个网址链接: http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo
>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<
然后抓包:
看的出来这个网页是POST请求,携带的参数就是我随意输入的手机号码。但是在请求的正文看不到后面的 ?以及 ?后面的参数。因为这个POST请求正文隐藏起来了,不设置为明文。
然后我们来用POST请求本文开头提供的那个网址:
http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
获取请求参数数据。
Copy Request就能获取mobileCode=18720988888&userID=
但是要注意,这个返回的是xml数据:
如果还是用manager.responseSerializer = [AFJSONResponseSerializer serializer];是会出错的,想试一试可以试试,返回错误是因为,那个网站返回的事xml数据,但是解析序列化用的是json是解析不了的,所以要改为manager.responseSerializer = [AFXMLParserResponseSerializer serializer];就不会出错了:
相关文章推荐
- iOS开发之网络数据解析(二)--XML解析简介
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
- iOS开发之网络编程--小文件下载
- iOS开发网络篇—GET请求和POST请求
- iOS开发之网络数据解析(一)--JSON解析简介
- 浏览器怎么决定发送HTTP的Accept-Language请求头
- linux中的网络基础
- c++中的常量折叠 http://blog.csdn.net/yafeng_jiang/article/details/7101964
- 计算机网络之网络层
- 结构体对齐详解http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html
- 20160310_开创自己的网络文章空间
- Failed to issue method call: Unit httpd.service failed to load: No such file or directory.
- tcp校验和
- 结合网页排名来做社会网络分析,挖掘核心人物
- 阻塞,非阻塞connect()和accept()
- AFNetworking3.0 如何取消单个网络请求
- 对计算机网络的一些认识
- OSI(Open System Interconnection)网络模型
- 火狐浏览器中添加httprequest的方法
- 学习UNITY3D网络插件photon pun和PhotonServer<三>