我在之前一篇博客中实现了使用NSURLConnection或者NSURLSession来请求网络数据,用的都是苹果自带的方法。请参考《iOS开发——网络请求案例汇总》。现在我们使用最流行的AFNetworking库来进行网络请求。代码我已经上传至https://github.com/chenyufeng1991/iOS-NetworkRequest  。

【1.AFNetworking请求SOAP】

SOAP一般需要我们发送XML数据,返回的一般也是XML数据。我这里用的也是http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx   。这个网站的手机号码归属地查询。不过经过我测试,时间延迟会比较长。。实现方式如下:

#import "AFNsoapViewController.h"
#import <AFNetworking.h>@interface AFNsoapViewController ()@end@implementation AFNsoapViewController- (void)viewDidLoad {[super viewDidLoad];// 创建SOAP消息,内容格式就是网站上提示的请求报文的主体实体部分    这里使用了SOAP1.2;NSString *soapMsg = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>""<soap12:Envelope ""xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ""xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ""xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">""<soap12:Body>""<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">""<mobileCode>%@</mobileCode>""<userID>%@</userID>""</getMobileCodeInfo>""</soap12:Body>""</soap12:Envelope>", @"18888888888", @""];NSURL *url = [NSURL URLWithString: @"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapMsg length]];[req addValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];[req setHTTPMethod:@"POST"];[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];AFHTTPRequestOperation *operate = [[AFHTTPRequestOperation alloc] initWithRequest:req];operate.responseSerializer = [AFHTTPResponseSerializer serializer];[operate setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"成功:%@",result);} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {NSLog(@"成功:%@",error);}];[operate start];}@end

打印结果如下:

【2.AFHTTPRequestOperationManager请求Http】

这里直接用一个链接请求服务器数据,可以使用GET或者POST请求。参数直接写入到链接中。实现方式如下:

#import "AFNHttp1ViewController.h"
#import <AFNetworking.h>@interface AFNHttp1ViewController ()@end@implementation AFNHttp1ViewController- (void)viewDidLoad {[super viewDidLoad];AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];//这里改成POST,就可以进行POST请求;//把要传递的参数直接放到URL中;而不是放到字典中;[manager GET:@"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId="parameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject){NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"成功: %@", string);}failure:^(AFHTTPRequestOperation *operation,NSError *error){NSLog(@"失败: %@", error);}];}@end

【3.AFHTTPRequestOperationManager请求Http改进版】

在2的例子中,我们把参数放到了请求的链接中,并不是特别的方便,这里我们使用字典来存放需要发送的数据。实现如下:

#import "AFNHttp2ViewController.h"
#import <AFNetworking.h>@interface AFNHttp2ViewController ()@end@implementation AFNHttp2ViewController- (void)viewDidLoad {[super viewDidLoad];AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];NSDictionary *dic = @{@"mobileCode":@"18888888888",@"userID":@""};//这里改成POST,就可以进行POST请求;[manager GET:@"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo"parameters:dicsuccess:^(AFHTTPRequestOperation *operation,id responseObject){NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"成功: %@", string);}failure:^(AFHTTPRequestOperation *operation,NSError *error){NSLog(@"失败: %@", error);}];}@end

打印结果与2一样。

【4.AFHTTPRequestOperation请求Http】

在3的例子中,我们通过发送参数列表和链接地址来进行网络请求。现在我们设置一个Request,把这些数据都放到request参数中,然后通过只发送一个request来实现。

#import "AFNHttp3ViewController.h"
#import <AFNetworking.h>@interface AFNHttp3ViewController ()@end@implementation AFNHttp3ViewController- (void)viewDidLoad {[super viewDidLoad];NSURL *url = [NSURL URLWithString: @"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=18888888888&userId="];NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];[req setHTTPMethod:@"GET"];AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:req];operation.responseSerializer = [AFHTTPResponseSerializer serializer];[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"成功:%@",result);} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {NSLog(@"失败:%@",error);}];[operation start];}@end

打印结果与2一样。

【5.AFnetworking发送XML进行Http请求】

这种方式平时不多见,这里把“***”作为字典中的键,把XML作为字典中的值进行发送。并且还要进行安全性的设置。实现代码如下:

#import "AFNXMLHttpViewController.h"
#import <AFNetworking.h>@interface AFNXMLHttpViewController ()@end@implementation AFNXMLHttpViewController- (void)viewDidLoad {[super viewDidLoad];/*这里需要进行如下的安全性设置;使用AFNetworking发送XML,如果不进行如下的设置,将会报错:Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}*/AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];[securityPolicy setAllowInvalidCertificates:YES];AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];[manager setSecurityPolicy:securityPolicy];manager.responseSerializer = [AFHTTPResponseSerializer serializer];NSString *str = @"这里存放需要发送的XML";NSDictionary *parameters = @{@"test" : str};//test是这个XML对应的名字[manager POST:@"需要发送的链接"parameters:parameterssuccess:^(AFHTTPRequestOperation *operation,id responseObject){NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];NSLog(@"成功: %@", string);}failure:^(AFHTTPRequestOperation *operation,NSError *error){NSLog(@"失败: %@", error);}];}@end

总结,使用AFNetworking进行网络请求还是比较简单的,我会继续深入的研究AFNetworking,有任何成果都会分享给大家。

最近开源的iOS应用,高仿印象笔记  https://github.com/chenyufeng1991/iOS-Oncenote 。欢迎大家点赞并关注项目进度。也可以安装到手机上试玩哦。

github主页:https://github.com/chenyufeng1991  。欢迎大家访问!

iOS开发——网络请求案例汇总(AFNetworking)相关推荐

  1. iOS开发——网络请求案例汇总

    在实际的项目开发中,连接网络是每一款App必不可少的基本功能.对于客户端的网络请求而言,无非是有两个实现方向:使用网络请求框架或者不使用网络请求框架.在这篇博客中,我将用苹果自带的网络请求方式(不使用 ...

  2. iOS开发——网络请求数据处理

    之前博客中介绍了iOS中常用的网络框架AFNetworking,其中常用的POST请求方法如下: AFHTTPRequestOperationManager *manager = [AFHTTPReq ...

  3. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  4. iOS开发网络篇—多线程断点下载

    iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...

  5. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  6. iOS开发网络篇—数据缓存

    iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以 ...

  7. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇-搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

  8. Method-Swizzling实战-实现iOS原生网络请求性能采集

    一.方法交换实现步骤(实例方法和类方法处理逻辑类似) 1.检查原类(要被替换方法的类)的原实例方法是否存在,如果不存在,则不交换: 2.检查新类(最终被使用的方法所在的类)的新实例方法是否存在,如果不 ...

  9. ios获取网络请求失败相关数据

    ios获取网络请求失败相关数据 很多时候和后台处理数据的时候很多时候后台会在网络请求失败的某些不同情况下带回不同的数据这个时候如何获取数据及拿到需要处理的数据: //如果请求失败 对象是NSURLSe ...

最新文章

  1. KVM中I/O设备直接分配和SR-IOV(十六)
  2. P1016 旅行家的预算
  3. 《Java线程与并发编程实践》—— 2.3 谨防活跃性问题
  4. 你们考试,我们都有点紧张呢…
  5. 【渝粤教育】10259k2_经济学基础_21秋考试
  6. GitHub+jsDelivr+PicGo+Visual Studio Code 打造稳定、快速、高效、免费图床
  7. 性能测试之性能监控技术
  8. python数据分析要学多久_如何七周成为数据分析师18:Python的新手教程
  9. 惊慌 Android!使用 3D 打印的头像可破解多款手机
  10. ThinkPHP文件上传类的使用
  11. Ext Scheduler(日程表) 2.0——升级到4.0
  12. C++_homework_StackSort
  13. Python基础知识之二
  14. 参考文献起止页码怎么写_参考文献规范写法
  15. 奥克兰计算机科学专业世界排名,新西兰计算机专业大学排名
  16. 数据分析(Python)入门—鸢尾植物数据集处理
  17. python爬取智联招聘网_python爬取智联招聘工作岗位信息
  18. 2021春季校园招聘各大公司投递通道汇总
  19. 香港中文大学校长计算机,喜讯 | 香港中文大学(深圳)理工学院黄建伟教授团队在IEEE计算机通信国际会议INFOCOM发表四篇论文...
  20. SimpleDateFormat小坑

热门文章

  1. 晚上11:45点 ,你进入睡眠状态了吗?
  2. 什么是平均值 (Average)?
  3. 微信小程序实战--基于微信小程序的新闻客户端
  4. 信号与系统_系统频率响应
  5. 使用thymeleaf对数据库取出的数据进行渲染时所踩的”坑“
  6. 解析Android mdpi hdpi xhdpi xxhdpi xxxhdpi 之间关系
  7. 面试题之从敲入 URL 到浏览器渲染完成
  8. 影视作品烂到至高无上的境界不是槽点满满
  9. Joshua Bloch离开Google了,Dart前景堪忧
  10. VScode 插件live preview无法显示背景图片/图片