网络请求AFNetworking
1.NSURLConnection /NSURLSession 都是系统原生的数据请求;
2:ASIHTTPRequest 是一个网络请求的库,前几年非常火,停更了。。。(停止更新了);
3:AFNetWorking 现在最火的一个网络请求的第三方库,是gittub 上下载量排行第一的团体库
4:HTTP请求,有很多种方式 默认GET 请求 , POST请求的安全性更高一些;
//NSURLConnection /NSURLSession 都是系统原生的数据请求
//原生意味着稳定,不好用,使用麻烦
//在实际开发中,网络请求要么自己封装一个 要么已经封装好的第三方库
// ASIHTTPRequest
//是一个网络请求的库,前几年非常火
//MRC,如果需要再ARC工程种运用,需要进行混编 -fno-objc-arc
//回调, 是通过协议的方式来实现的。
//停更了。。。(停止更新了)
//AFNetWorking
//现在最火的一个网络请求的第三方库,是gittub 上下载量排行第一的团体库
//ARC ,
//回调, 是通过block来实现的,使用方便
// 网络请求,需要去获取服务器上的某些数据
//1. 给服务器发送一个数据请求 (Resquset)
//2.接收服务器给我们的响应(Response)
// HTTP请求,有很多种方式
//GET / POST 最常用
//GET : 请求是把所有的参数,直接拼接到接口后面,做成一个URL, 发送请求
//默认GET 请求
//POST : 从接口中,只能看到要访问的文件,把参数做成一个表单,发送给服务器
//区别:
//1. POST请求的安全性更高一些
//2. GET 请求效率更高一些
//3. 大小限制: GET请求2kb, POST请求理论上是无限制的
//4. 上传文件,必须用POST (因为GET请求大小有限制)
//结论: 如果牵涉到表单内容修改,用POST (如:修改用户名), 如果只是一个查询的查询的操作(如:查询好友)
案列
#import "ViewController.h"
#import "AFNetworking.h"
#define BASE_URL @"http://iappfree.candou.com:8080/free/applications/limited"
#define IMG_URL @"http://a.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938d3de795ad0628535e4dd6fe2.jpg"
#define QiuBai @"http://m2.qiushibaike.com/article/list/suggest"
#define LOGIN @"http://10.0.8.8/sns/my/friend.php"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//GET 请求
[self GET];
//[self momitor];
//POST 请求
//[self POST];
}
/**用AFNetworking做一个GET请求*/
- (void)GET{
//1. 实例化一个 AFHTTPRequestOperationManager 对象
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
#warning AFNetworking 会自动的将数据的请求结果(data)进行格式转换(dict),想关闭数据自动解析
//AFNetworking 会自动的将数据的请求结果(data)进行格式转换(dict)
// 想关闭数据自动解析
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 添加响应的数据处理格式
// manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
// manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
//2. GET 请求
//1.要请求的接口 NSString
//2.要传递的参数 字典
//3.请求成功的回调
//4.请求失败的回调
//#if 1
//无参get的请求
[manager GET:@"http://u1.tiyufeng.com/v2/section/content_list?portalId=15&id=352&start=33&limit=10&portalId=15&clientToken=8ca9cbf2da97c2857a324f6612083830" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 请求成功的回调
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//请求错误的回调 (失败的回调)
NSLog(@"%@",error);
}];
//#else
//有参数的GET 请求
//
/* NSDictionary *dic = @{@"count":@20,@"page":@1};
//这个方法, 会把我们传递的参数,拼接到接口地址后面
[manager GET:QiuBai parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
//请求成功
NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//请求失败
NSLog(@"%@",error);
}];
*/
//#endif
}
/**用AFNetworking做一个POST 请求*/
- (void) POST {
// 1. 获取单例
AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
//2.POST请求
NSDictionary *dict = @{@"uid":@123123};
[manager POST:IMG_URL parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"-----%@",result);
//成功的回调
// NSLog(@"%@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//失败的回调
NSLog(@"%@",error);
}];
/*
只有上传文件才会使用
manager POST:<#(NSString *)#> parameters:<#(id)#> constructingBodyWithBlock:<#^(id<AFMultipartFormData> formData)block#> success:<#^(AFHTTPRequestOperation *operation, id responseObject)success#> failure:<#^(AFHTTPRequestOperation *operation, NSError *error)failure#>
*/
}
/**网络状态监听*/
- (void)momitor{
//要保证这个manager 这个对象不被释放,才能正常进行监听
//获取一个manager单例
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
//设置网络状态发生变化后的回调
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
//在这里,需要对网络状态发生变化后,进行处理
/**
AFNetworkReachabilityStatusUnknown = -1,//未知
AFNetworkReachabilityStatusNotReachable = 0,//无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1,//移动网络/蜂窝移动网络
AFNetworkReachabilityStatusReachableViaWiFi = 2,//WiFi
*/
NSArray *messages = @[@"未知,你在荧惑把?",@"没有网络,手机欠费了",@"土豪,任信",@"屌丝。。。。"];
NSLog(@"%@",messages [status + 1]);
}];
//3. 开始监听
[manager.reachabilityManager startMonitoring];
}
@end
网友评论