xn4545945 On the way

众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐。操作起来很不方便。不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题。

一、早前的几个网络框架

但是有

AFNetworking的出现:

地址:https://github.com/AFNetworking/AFNetworking

二、AFNetworking的使用

因为没有

*AFJSONRequestSerializer(JSON)

*AFPropertyListRequestSerializer(Plist)

*AFJSONResponseSerializer(JSON)

*AFPropertyListResponseSerializer(Plist)

*AFXMLParserResponseSerializer(XML)

*AFImageResponseSerializer(Image)

关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在acceptableContentTypes中修改即可。

AFN进行GET、POST登录:

#pragma mark – get/post登录- (void)getLogin {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.设置登录参数NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.请求[manager GET:@"" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"GET –> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}/** * 和上面的GET用法完全一样, 只有一个POST参数不一样 */- (void)postLogin {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.设置登录参数NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.请求[manager POST:@"" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"POST –> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}AFN进行网络数据解析,获取Plist,JSON,XML(AFN不支持自动解析XML,有专门的框架去做,如SAX,PULL,,KissXML等)#pragma mark – get 数据解析- (void)getJSON {//1.请求管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.发起请求[manager GET:@"" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}/** * 不支持XML数据解析 */- (void)getXML {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.设置返回数据类型manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下//3.发起请求[manager GET:@"" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}- (void)getPlist {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.设置response类型manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.//3.请求[manager GET:@"" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}用AFN来POST JSON数据,上传、下载等。(上传、下载主页说明上有https://github.com/AFNetworking/AFNetworking)#pragma mark – post json数据与上传文件等- (void)postJSON {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.设定类型. (这里要设置request-response的类型)manager.requestSerializer = [AFJSONRequestSerializer serializer];manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //这个决定了下面responseObject返回的类型// manager.responseSerializer = [AFJSONResponseSerializer serializer];//manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];//2.设置登录参数NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.发送请求[manager POST:@"" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {//NSLog(@"postjson–> %@", responseObject); //这样显示JSON的话需要设置text/plainNSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"%@",result);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"%@", error);}];}

转载请注明出处:

业精于勤,荒于嬉;行成于思,毁于随。

xn4545945 On the way

相关文章:

你感兴趣的文章:

标签云: