博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记...
阅读量:6800 次
发布时间:2019-06-26

本文共 2648 字,大约阅读时间需要 8 分钟。

hot3.png

AFNetworking是开源代码排名第一的开源库。

 GET请求的请求正文 一般都是明文显示的,携带的数据量小。
POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只是不明文显示,所以我们在有的时候,有的网址你是看不到GET请求的网址有?以及?后面携带的明文请求数据。
 
抓包工具:网址:
测试的网址:
    //
    //
这两个测试的网址,可以点击进去,看看数据。打开抓包工具,可以看到相关的信息:
 
这里是请求携带的信息。也就是所谓的请求正文。
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:nil22                                                  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请求:

先打开一个网址链接: 

>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<

然后抓包:

 看的出来这个网页是POST请求,携带的参数就是我随意输入的手机号码。但是在请求的正文看不到后面的 ?以及 ?后面的参数。因为这个POST请求正文隐藏起来了,不设置为明文。
然后我们来用POST请求本文开头提供的那个网址:
获取请求参数数据。
Copy Request就能获取mobileCode=18720988888&userID=
但是要注意,这个返回的是xml数据:
 
 如果还是用manager.responseSerializer = [AFJSONResponseSerializer serializer];是会出错的,想试一试可以试试,返回错误是因为,那个网站返回的事xml数据,但是解析序列化用的是json是解析不了的,所以要改为manager.responseSerializer = [AFXMLParserResponseSerializer serializer];就不会出错了:
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://my.oschina.net/u/2363463/blog/635670

你可能感兴趣的文章
java多态深入理解(二)
查看>>
利用node.js和mongodb为你的app写一个web服务
查看>>
Rails 3 Authlogic: Could not find generator ses...
查看>>
iOS静态库的那些坑
查看>>
IOS-APP提交上架流程(新手必看!2016年3月1日最新版)
查看>>
oracle rman 2
查看>>
hyper-v下NIC实验出现的问题
查看>>
shell 显示文件的行数
查看>>
Linux:常规目录操作
查看>>
2016年2月书单
查看>>
redis存储 100 条最新的记录
查看>>
There is no reason to wait
查看>>
tomcat 配置单向加密连接器-01
查看>>
数据库备份恢复 mysqldump, source
查看>>
花生壳与网络地址转换
查看>>
4.信号与传输介质
查看>>
免费资源下载:Simplycons图标集
查看>>
MySQL 性能医生:OrzDBA
查看>>
【设计模式】代理模式
查看>>
linux脚本获取系统信息(选自实验楼实验)
查看>>