新人求助afnetworking js 发送post请求demo的demo

iOS开发网络数据之AFNetworking使用
http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库。最新版本支持session,xctool单元测试。网络获取数据一直是手机软件的重中之重,如果处理的不好,会造成很差的用户体验。随着ASIHTTPRequest的停止更新,更换网络库是必然的事情,AFNetworking就是很好的替代品。而且都是轻量级,不要担心加入太多库会多软件性能有影响。
1.为什么用第三方网络库?先说如果不用网络库,我曾有一次觉得什么都用苹果原生的好,XML解析用苹果自带的委托,下载图片自己写,如果你也有跟我一样的经历,那你会发现自己管理起来很复杂,很容易出错。而且性能不好。如果你是一个追求完美的人,那就放下你的固执,就如当初的我一样,尝试一下网络库吧。
2.为什么要用AFNetworking?第一点,它有人更新和维护,而且目前使用者很多,第二点,还是使用者很多,那么他的资料,文档,demo就多,很好找遇到问题好解决。如果不用AFNetworking,还有一种MKNetworkKit也不错,不妨一试。
如何选择AFNetworking版本
首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少。AFNetworking
2.0或者之后的版本需要xcode5.0版本并且只能为IOS6或更高的手机系统上运行,如果开发MAC程序,那么2.0版本只能在MAC
OS X 10.8或者更高的版本上运行。
如果你想要兼容IOS5或MAC OS X 10.7,那你需要用最新发布的1.x版本
如果要兼容4.3或者MAC OS X 10.6,需要用最新发布的0.10.x版本
AFNetworking 0.10.x
2013年大多数软件兼容的最低版本为4.3,而2014年,估计大多数软件兼容的最低版本将会是5.0甚至6.0;
所以,目前最好的选择还是1.x版本,兼容到IOS5.0。
如何通过URL获取json数据
第一种,利用AFJSONRequestOperation,官方网站上给的例子:
NSString *str=[NSString stringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];
& NSURL *url =
[NSURL URLWithString:[str
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
& NSURLRequest *request = [NSURLRequest
requestWithURL:url];
从URL获取json数据
& AFJSONRequestOperation *operation1 = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSDictionary* JSON) {
& & NSLog(@"获取到的数据为:%@",JSON);
& & } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id data) {
& NSLog(@"发生错误!%@",error);
& & [operation1 start];
第二种方法,利用AFHTTPRequestOperation&先获取到字符串形式的数据,然后转换成json格式,将NSString格式的数据转换成json数据,利用IOS5自带的json解析方法:
& &NSString&*str=[NSString&stringWithFormat:@"https://alpha-api.app.net/stream/0/posts/stream/global"];
&&NSURL&*url =
[NSURL&URLWithString:[str&stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
&&NSURLRequest&*request =
[NSURLRequest&requestWithURL:url];
&AFHTTPRequestOperation
*operation =
[[AFHTTPRequestOperation
alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
& NSString
*html = operation.responseString;
& &NSData* data=[html dataUsingEncoding:NSUTF8StringEncoding];
& &id dict=[NSJSONSerialization&
JSONObjectWithData:data
options:0 error:nil];
& NSLog(@"获取到的数据为:%@",dict);
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
& NSLog(@"发生错误!%@",error);
& NSOperationQueue *queue = [[NSOperationQueue
alloc] init];
& & [queue addOperation:operation];
如果发生Error Domain=NSURLErrorDomain Code=-1000 "bad URL"
UserInfo=0x14defc80 {NSUnderlyingError=0x14deea10 "bad URL",
NSLocalizedDescription=bad URL这个错误,请检查URL编码格式。有没有进行stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
如何通过URL获取图片
异步获取图片,通过队列实现,而且图片会有缓存,在下次请求相同的链接时,系统会自动调用缓存,而不从网上请求数据。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 100.0f, 100.0f, 100.0f)];
& & [imageView setImageWithURL:[NSURL URLWithString:@"http://i./r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];
& & [self.view addSubview:imageView];
上面的方法是官方提供的,还有一种方法,
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
URLWithString:@"http://www.scott-sherwood.com/wp-content/uploads/2013/01/scene.png"]];
& AFImageRequestOperation *operation = [AFImageRequestOperation
imageRequestOperationWithRequest:request imageProcessingBlock:nil
success:^(NSURLRequest
*request, NSHTTPURLResponse
*response, UIImage *image) {
& self.backgroundImageView.image =
} failure:^(NSURLRequest
*request, NSHTTPURLResponse
*response, NSError *error) {
& NSLog(@"Error
%@",error);
& & [operation start];
如果使用第一种URLWithString:&&placeholderImage:会有更多的细节处理,其实实现还是通过AFImageRequestOperation处理,可以点击URLWithString:&&placeholderImage:方法进去看一下就一目了然了。所以我觉得还是用第一种好。
如何通过URL获取plist文件
通过url获取plist文件的内容,用的很少,这个方法在官方提供的方法里面没有
NSString *weatherUrl =
@"http://www.calinks.com.cn/buick/kls/Buickhousekeeper.plist";
& NSURL *url =
[NSURL URLWithString:[weatherUrl
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
& NSURLRequest *request = [NSURLRequest
requestWithURL:url];
[AFPropertyListRequestOperation
addAcceptableContentTypes:[NSSet setWithObject:@"text/plain"]];
& AFPropertyListRequestOperation
*operation =
[AFPropertyListRequestOperation
propertyListRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id propertyList) {
& NSLog(@"%@",(NSDictionary *)propertyList);
& & }failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id propertyList) {
& NSLog(@"%@",error);
& & [operation start];
如果稍不留神,可能就出现Error
Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type
& "application/x-plist"
)}, got text/plain"
UserInfo=0x16e91ce0 {NSLocalizedRecoverySuggestion=
AFNetworkingOperationFailingURLRequestErrorKey= { },
NSErrorFailingURLKey=, NSLocalizedDescription=Expected content type
& "application/x-plist"
)}, got text/plain,
AFNetworkingOperationFailinponseErrorKey= { URL:
&} { status code: 200, headers {
& "Accept-Ranges" =
& Connection = "keep-alive";
& "Content-Length" = 974;
& "Content-Type" = "text/plain";
& Date = "Sat, 25 Jan :26
""ce-4ee63e1c80e00"";
& "Last-Modified" = "Wed, 25 Dec :24
& Server = "nginx/1.4.2";
可能还会出现乱码,解决办法就是[AFPropertyListRequestOperation&addAcceptableContentTypes:[NSSet&setWithObject:@"text/plain"]];
如何通过URL获取XML数据
xml解析使用AFXMLRequestOperation,需要实现苹果自带的NSXMLParserDelegate委托方法,XML中有一些不需要的协议格式内容,所以就不能像json那样解析,还得实现委托。我之前有想过能否所有的XML链接用一个类处理,而且跟服务端做了沟通,结果很不方便,效果不好。XML大多标签不同,格式也不固定,所以就有问题,使用json就要方便的多。
第一步;在.h文件中加入委托NSXMLParserDelegate
第二步;在.m文件方法中加入代码
*url = [NSURL
URLWithString:@"http://113.106.90.22:5244/sshopinfo"];
& NSURLRequest *request = [NSURLRequest
requestWithURL:url];
& AFXMLRequestOperation *operation =
[AFXMLRequestOperation
XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
& XMLParser.delegate = self;
& & [XMLParser
setShouldProcessNamespaces:YES];
& [XMLParser parse];
& & }failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
& NSLog(@"%@",error);
& & [operation start];
第三步;在.m文件中实现委托方法
&&//在文档开始的时候触发
-(void)parserDidStartDocument:(NSXMLParser *)parser{
& NSLog(@"解析开始!");
//解析起始标记
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary
*)attributeDict{
& & NSLog(@"标记:%@",elementName);
//解析文本节点
- (void)parser:(NSXMLParser *)parser
foundCharacters:(NSString
& & NSLog(@"值:%@",string);
//解析结束标记
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString
& & NSLog(@"结束标记:%@",elementName);
//文档结束时触发
parserDidEndDocument:(NSXMLParser *)parser{
& NSLog(@"解析结束!");
运行的结果:
如何使用AFHTTPClient进行web service操作
AFHTTPClient处理GET 和
POST请求.做网页的朋友们这个方法用的比较多。在要经常调用某个请求时,可以封装,节省资源。
&BaseURLString&=
@"http://www.raywenderlich.com/downloads/weather_sample/";
*baseURL = [NSURL
URLWithString:[NSString
stringWithFormat:BaseURLString]];
& NSDictionary *parameters = [NSDictionary
dictionaryWithObject:@"json" forKey:@"format"];
& AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[client registerHTTPOperationClass:[AFJSONRequestOperation class]];
[client setDefaultHeader:@"Accept" value:@"text/html"];
& & [client postPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation,
id responseObject) {
& & NSString* newStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
& NSLog(@"POST请求:%@",newStr);
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
& NSLog(@"%@",error);
& & [client getPath:@"weather.php" parameters:parameters success:^(AFHTTPRequestOperation *operation,
id responseObject) {
& & NSString* newStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
& NSLog(@"GET请求:%@",newStr);
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
& NSLog(@"%@",error);
运行结果:
如果需要显示网络活动指示器,可以用下面方法:
[AFNetworkActivityIndicatorManager sharedManager].enabled =
Error: Error Domain=AFNetworkingErrorDomain Code=-1016
"Request failed: unacceptable content-type: text/html"
UserInfo=0x16774de0
{NSErrorFailingURLKey=http://192.168.2.2:8181/ecar/tsp/uploadLocation?CID=781666&serviceType=1,
AFNetworkingOperationFailinponseErrorKey= { URL:
http://192.168.2.2:8181/ecar/tsp/uploadLocation?CID=781666&serviceType=1
} { status code: 200, headers {
} }, NSLocalizedDescription=Request failed: unacceptable
content-type: text/html}
返回数据格式不对。注销这句话:&op.responseSerializer
= [AFJSONResponseSerializer serializer];然后将返回的数据自己转换。
error = Error Domain=com.alamofire.error.serialization.response
Code=-1016 "Request failed: unacceptable content-type: text/html"
UserInfo=0x
{com.alamofire.serialization.response.error.response= { URL:
http://192.168.5.132/api/cats?type=apps } { status code: 200,
& & Connection =
"keep-alive";
& & "Content-Type" = "text/
charset=utf-8";
& & Date = "Thu, 05 Nov 2015
10:27:42 GMT";
& & Server =
& & "Transfer-Encoding" =
AF可以接受json以外的数据 & &自己随意定义的格式都可以
& &只不过要使用AFNetwork提供的解析方法的话
& 它只对通用的格式做处理 &
&你返回的数据不是那种格式 & 他就无法解析出来
& & 那要你自己处理 &
&改变AFNetWork的库文件 &
& 找到他判断错误的那个函数 &
&让他从正确的方法返回 & &
如果你不会的话 &就在返回错误的方法处理也可以 &
反正数据已经到了 & & &
网络的目的 & 是为了得到数据 &
&你的数据已经到了 &
只不过AFNetwork认定你的数据不符合常用的格式 & &
&确实也不符合 & 因为你的数据是加密的东西
& 而且是对整个json格式加密 & 而不是只对值加密
& &所以要实现这种格式的传输
& &只能修改AFNetwork的库
& &而你不会 &
&那就先这么用着
举个例子 & &你们现在的做法是对整个字符串加密
& &如果你不这么做 &
&只将值部分加密 &而不对键加密
& &就是{“message”:“值的密文”}
& 那么这个数据仍然符合json格式 &
AFNetwork依然能解析出来 & &
& 你们对整个json字符串都加密了 &那密文就不是json格式了
所以你们可以按我说的改 &仅加密值部分 &
& 也就按照现在的方法 &
&在错误的返回方法里面处理数据 &
&但是你自己知道数据是正确的 &
只不过AFNetwork误判了而已 & &
& &这个属于原理上东西 &
&改不了 & &
要么就是不让AFNetwork解析 & &
&他只透传 & &你自己解析
& &如果让他帮你解析 &
你就要指定一个格式给他 & &指定了格式
&而你的数据不符合格式 & 那就是按错误的方法返回
AFNetworking关于HTTP认证的问题
AFNetwork实现basic认证的方法很简单
AFNetwork实现digest认证
创建一个NSURLCredential对象,然后将对象赋值到请求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSURLCredential *credential = [[NSURLCredential alloc] initWithUser:@"Username" password:@"Password" persistence:NSURLCredentialPersistenceForSession];
[manager setCredential:credential];&
。关于AFNetWork2.0的demo已经完成,有需要的朋友到QQ群:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。postjson.php
3 if ($_POST["uid"]=="admin" && $_POST["pwd"]=="123") {
$array = Array("web"=&"php","app"=&"IOS","3d"=&"unity3d");
echo json_encode($array);
getjson.php
3 if ($_GET["uid"]=="admin" && $_GET["pwd"]=="123") {
$array = Array("web"=&"php","app"=&"IOS","3d"=&"unity3d");
echo json_encode($array);
TestController.m
1 #import "TestController.h"
2 #import "AFHTTPSessionManager.h"
4 @interface TestController()
6 @property(nonatomic,strong)UIButton *
10 @implementation TestController
12 - (void)viewDidLoad
[super viewDidLoad];
_button = [UIButton buttonWithType:UIButtonTypeSystem];
_button.frame = CGRectMake(0, 20, 100, 20);
[_button setTitle:@"Hello" forState:UIControlStateNormal];
[_button addTarget:self action:@selector(start:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_button];
28 -(void)start:(UIButton*)sender
//初始化manager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//POST请求
NSString *url = @"http://localhost/xampp/mvc/test/postjson.php";
NSDictionary *mdic = [NSDictionary dictionaryWithObjectsAndKeys:@"admin",@"uid",@"123",@"pwd",nil];
[manager POST:url parameters:mdic constructingBodyWithBlock:^(id&AFMultipartFormData&
_Nonnull formData) {
} progress:^(NSProgress * _Nonnull uploadProgress) {
// 这里可以获取到目前的数据请求的进度
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
// 请求成功,解析数据
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@",dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 请求失败
NSString *url = @"http://localhost/xampp/mvc/test/getjson.php?uid=admin&&pwd=123";
[manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
// 这里可以获取到目前的数据请求的进度
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
// 请求成功,解析数据
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@", dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 请求失败
NSLog(@"%@", [error localizedDescription]);
阅读(...) 评论()1.首先通过第三方:CocoaPods下载AFNetworking
1.1.先找到要查找的三方库:pod search + AFNetworking
1.2.出来一堆列表页面,选择三方库最新版本命令,例如: pod &MBProgressHUD&,&~&0.8&& (:q 返回)
1.3.创建工程,进入工程: cd + 工程路径
1.4.编辑工程的Podfile文件: vim Podfile
1.5.(platform :iOS, &8.0&?target &工程名& do?pod &AFNetworking&, &~& 3.1.0&?end)新版本 (编辑键i)-&(Esc键: 输入:wq返回)
1.6.6.保存Podfile的设置,然后进行更新下载三方库: pod update
2.进入工程进行相关操作
1 // 网络请求的头文件
2 #import &AFNetworking.h&
3 @interface ViewController ()
// 进行网络监测判断的bool值
10 // 用于网络请求的Session对象
11 @property (nonatomic, strong) AFHTTPSessionManager *
16 @implementation ViewController
18 - (void)viewDidLoad {
[super viewDidLoad];
// 初始化Session对象
self.session = [AFHTTPSessionManager manager];
// 设置请求接口回来的时候支持什么类型的数据
self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil];
26 #pragma mark - 网络监测按钮的响应方法
27 - (IBAction)NetworkmonitoringAction:(id)sender {
if (!isOpen) {
//打开网络监测
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
isOpen = YES;
// 关闭网络监测
[[AFNetworkReachabilityManager sharedManager] stopMonitoring];
isOpen = NO;
// 接下来会判断当前是WiFi状态还是3g状态,网络不可用状态
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"当前网络处于未知状态");
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"当前网络处于未链接状态");
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手机流量网络");
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi状态");
66 #pragma mark - get请求
67 - (IBAction)getRequestAction:(id)sender {
// 参数1: get请求的网址
// 参数2: 拼接参数
// 参数3: 当前的进度
// 参数4: 请求成功
// 参数5: 请求失败
[self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"下载的进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"请求成功:%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败:%@", error);
85 #pragma mark - post请求
86 - (IBAction)postRequestAction:(id)sender {
do = "pri_memberlist";
"member_id" = zpHr2dsRvQQxYJxo2;
"workspace_id" = ILfYpE4Dhs2gWcuQx;
NSString *urlString = @"http://m.taskwedo.com/API/wedo1/wedo.php";
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"pri_memberlist" forKey:@"do"];
[dict setObject:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
[dict setObject:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"];
// 参数1: url
// 参数2: body体
[self.session POST:urlString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"上传的进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"post请求成功%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"post请求失败:%@", error);
111 #pragma mark - post2请求
112 - (IBAction)postTwoRequestAction:(id)sender {
/*address = "";
comment = "\U7c7b\U6a21\U\U\Uc\U4e09\U90e8\Ud\Uff0c\U5f85\U63d0\U95ee\U3001\U56de\U7b54\U79ef\U7d2f\U\U5b9a\U6570\U91cf\U65f6\Uff0c\U4fbf\U4e8e\U\U7684\U95ee\U\U5feb\U901f\U67e5\U627e\Uff0c\U\U63d0\U95ee\U90e8\U\U65f6\U4e0d\U52a0\U\U4e2a";
do = "add_comment";
"member_id" = zpHr2dsRvQQxYJxo2;
other = "";
"task_id" = 55a47e79ec25e3641;*/
NSString *urlString = @"http://m.taskwedo.com/API/wedo1/wedo.php";
NSString *commonContent = @"类模块计划用到第三部分中,待提问、回答积累到一定数量时,便于大家的问题的快速查找,所以提问部分暂时不加入这个";
// 把汉字进行编码
commonContent = [commonContent stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValue:@"" forKey:@"address"];
[dict setValue:commonContent forKey:@"comment"];
[dict setValue:@"add_comment" forKey:@"do"];
[dict setValue:@"task" forKey:@"kind"];
[dict setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
[dict setValue:@"" forKey:@"other"];
[dict setValue:@"55a47e79ec25e3641" forKey:@"task_id"];
[self.session POST:urlString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"上传的进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"post请求成功:%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"post请求失败:%@", error);
阅读(...) 评论()AFNetworking 详解 以及 通过 POST 方式上传数据 - 简书
AFNetworking 详解 以及 通过 POST 方式上传数据
POST 发送数据有两种形式:
1、发送纯文本的内容
2、发送的 body 部分带有文件(图片,音频或者其他二进制数据)
对应的 Content-Type 有两种:
1、application/x-www-form-urlencoded
2、multipart/form-data
传统的使用 POST 的方式发送数据用于上传文件,AFNetworking 中提供了直接的接口:
[self.manager POST:post_url parameters:params constructingBodyWithBlock:^(id&AFMultipartFormData& formData) {
// 直接以 key value 的形式向 formData 中追加二进制数据
[formData appendPartWithFormData:[str dataUsingEncoding:NSUTF8StringEncoding]
name:@"key1"];
[formData appendPartWithFileData:imgData name:@"imagefile" fileName:@"img.jpg" mimeType:@"image/jpeg"];
}success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 成功后的处理
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 失败后的处理
使用 POST 方式发送纯文本内容:
- (NSMutableURLRequest *)postRequestWithURL:(NSString *)url content:(NSString *)text
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded"forHTTPHeaderField:@"Contsetent-Type"];
[request setHTTPBody:1];
NSOperation *operation =[self.manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// 成功后的处理
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 失败后的处理
[self.manager.operationQueue addOperation:operation];
其中 self.manager 为 AFHTTPRequestOperationManager 实例。
_manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
// 对于网站成功返回 JSON 格式的数据但是却在 failure 回调中显示的,
// 是因为服务器返回数据的网页中 content type 没有设置为 text/json
// 对于我们公司的服务器返回的 content type 为 text/html 所以我设置为如下这样,
// 对于不同的情况可以根据自己的情况设置合适的接受的 content type 的类型
_manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
一、什么是AFN
全称是AFNetworking,是对NSURLConnection的一层封装
虽然运行效率没有ASI高,但是使用比ASI简单
在iOS开发中,使用比较广泛
AFN的github地址
二、AFN结构
NSURLConnection
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)
baseURL :AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可
requestSerializer :请求数据格式/默认是二进制的 HTTP
responseSerializer :响应的数据格式/默认是 JSON 格式
operationQueue
reachabilityManager :网络连接管理器
manager :方便创建管理器的类方法
HTTPRequestOperationWithRequest :在访问服务器时,如果要告诉服务器一些附加信息,都需要在 Request 中设置
NSURLSession
AFURLSessionManager
AFHTTPSessionManager(封装了常用的 HTTP 方法)
UIKit + AFNetworking 分类
NSProgress :利用KVO
半自动的序列化&反序列化的功能
AFURLRequestSerialization :请求的数据格式/默认是二进制的
AFURLResponseSerialization :响应的数据格式/默认是JSON格式
AFSecurityPolicy
对苹果的网络连接检测做了一个封装
AFNetworkReachabilityManager
三、AFN基本使用
1.AFHTTPSessionManager
是AFN中最重要的对象之一
封装了HTTP请求的常见处理
GET\POST请求
解析服务器的响应数据
创建AFHTTPSessionManager
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
AFHTTPSessionManager的GET\POST请求
![Uploading 2323089-ffd30fab43c4efd0_116702.jpg . . .]
](http://upload-images.jianshu.io/upload_images/fc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/ec0c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/2323089-dabc9209.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/2323089-fcf12d1f0df27e18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/2323089-ee8da9f3b9fcb315.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/b8ffce05427ab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/693e390bfadb6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/2323089-dda4cc06d9ca8564.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/5a6983baed619.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/4a869f38f09e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
](http://upload-images.jianshu.io/upload_images/cc1eadd7ee293cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
AFN什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一层封装虽然运行效率没有ASI高,但是使用比ASI简单在iOS开发中,使用比较广泛AFN的github地址https://github.com/AFNetwork...
AFN什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一层封装虽然运行效率没有ASI高,但是使用比ASI简单在iOS开发中,使用比较广泛 AFN的github地址https://github.com/AFNetwor...
网络解析:AFNnetworking详解 一、什么事AFN□在iOS开发中,使用比较广泛□全称是AFNetworking,是对NSURLConnection、NSURLsession的一层封装□虽然运行效率没有ASI高,但是使用比ASI简单 二、AFN结构
13.服务器图片改了,url没有变,需求,服务器的图片变了,就从服务器加载图片,如果服务器的没变,就从本地加载 12、写出四个不同的http返回状态码以及分别所代表的意思。404表示请求的资源不存在 8、常用的数据格式是JSON还是XML,分别用哪些即时方式,优缺点是什么?...
全称是AFNetworking,是对NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN使用技巧 AFN框架结构 AFN发送网络请求 发送post请求与get请求大致相同,仅是将“2.发送请求中”方法名前部...
这是一篇关于《66个逻辑陷阱》的总结文章。
马克.吐温曾经说过:让我们陷入困境的不是无知,而是看似正确的谬误论断。不知道有留意我晨读打卡的朋友是否有一种“这么简单的谬误,so easy,MK是不是无聊,只是蹭字打卡而已”的感觉呢?有这种感觉,我并不意外每个人...
世上没有一种好可以来得理所当然,也没有一种好可以要得理直气壮;馈赠始于乐意,帮助源于值得,形式不一,实质一致:你能承受这份福气。古语云:厚德载物,能承受命运更多青睐和福气的人,一定是个懂礼感恩的人;不因偶尔小小得意而沾沾自喜,不因常常付出而即要回报;不张牙舞爪于生活高处...
樱桃村大约有1000户人口。他们主要集中分布在村里的东头,西头,南头和北头。 以村里的五棵老槐树为界限,村的东头和南头主要以王姓为主。而村的西头和北头主要以石姓为主。 他们的祖先也不知道是什么时候迁移到这里的。反正他们世世代代在这里生息繁衍,才组成了今天的樱桃村。 虽然,世...
我通常阅读小说的速度是比较快的。在这样快速的阅读里,我可能比较关注的还是情节的发生和演绎,偶尔会为一些辞藻和段落传达的感觉驻足。不同的小说节奏不同,有的比较松散,有的比较紧凑。但是看到最后结局,总是我看小说的一个推动力。这样快速的读书方式,其实往往不一定能够好好的品味...

我要回帖

更多关于 afnetworkingpost数组 的文章

 

随机推荐