1,AFNetWorking基本使用
1)GET请求
- (void)getDemo2
{
NSString *urlString = @"http://p.3.cn/prices/mgets";
NSDictionary *param = @{@"skuIds": @"J_1111111", @"type": @"1"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//get请求,参数可以这样写
[manager GET:urlString parameters:param success:^(AFHTTPRequestOperation * operation, id responseObject) {
NSLog(@"%@ %@", responseObject, [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation * operation, NSError * error) {
NSLog(@"%@", error);
}];
NSLog(@"done");
}
- (void)getDemo1
{
//get请求,参数直接拼成字符串
NSString *urlString = @"http://p.3.cn/prices/mgets?skuIds=J_1289996&type=1";
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation * operation, id responseObject) {
NSLog(@"%@ %@", responseObject, [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation * operation, NSError * error) {
NSLog(@"%@", error);
}];
NSLog(@"done");
}
2)POST请求
/**
1. 没有URL,只需要指定一个url的字符串
2. 网络请求是异步。 完成以后的回调代码快直接是在主线程
3. 已经实现了反序列化
4. 如果get方法,需要传递参数,可以使用字段的方式传递。程序猿不需要关心url里面的参数格式
*/
//POST 请求
- (void)getDemo3
{
NSString *urlString = @"http://p.3.cn/prices/mgets";
NSDictionary *param = @{@"skuIds": @"J_1111111", @"type": @"1"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:urlString parameters:param success:^(AFHTTPRequestOperation * operation, id responseObject) {
NSLog(@"%@ %@", responseObject, [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation * operation, NSError * error) {
NSLog(@"%@", error);
}];
NSLog(@"done");
}
3)解析不同的返回数据类型
- (void)getDemo4
{
/**
// 指定我们的响应的解析器是解析XML (会返回NSXMLParser:对象)也就是需要SAX方式手动解析
// 假如想使用DOM进行解析XML,可以指定响应的类型是二进制。拿到二进制数据就可以进行DOM解析
// 请求的数据格式,发送给服务器的格式
self.requestSerializer = [AFHTTPRequestSerializer serializer];
AFHTTPRequestSerializer 二进制的数据格式 (默认的)
AFJSONRequestSerializer JSON
AFPropertyListRequestSerializer PList
// 响应的解析器(默认直接解析JSON)
manager.responseSerializer = [AFJSONResponseSerializer serializer];
AFHTTPResponseSerializer 二进制
AFJSONResponseSerializer JSON (默认的数据格式)
AFXMLParserResponseSerializer XML的解析器
AFImageResponseSerializer Image
(处理网络图片的问题, SDWebImage)
*/
NSString *urlString = @"http://wthrcdn.etouch.cn/WeatherApi?citykey=101010101";
NSDictionary *param = @{@"citykey": @"101010100"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation * operation, id responseObject) {
NSLog(@"%@ %@", responseObject, [NSThread currentThread]);
} failure:^(AFHTTPRequestOperation * operation, NSError * error) {
NSLog(@"%@", error);
}];
}
4)上传图片
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:[NSNumber numberWithInt:24] forKey:@"uid"];
[dic setObject:@"submit" forKey:@"tijao"];
UIImage *newImage = [UIImage imageNamed:@"head.png"];
NSData *data = UIImageJPEGRepresentation(newImage, 0.3);//这个数越小,图片占的字节数越少,压缩图片,压缩转换格式并上传
[[AFHTTPSessionManager manager] POST:@"http://www.dcjyxwzx.cn/upload/change_avatar" parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {<pre name="code" class="objc"><span style="white-space:pre"> </span>// 要上传的图片的路径
NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"Snip20150123_3.png" withExtension:nil];
/**
FileURL:要上传的文件的url
name: 上传到服务器,接受这个图片的字段名
这种方式,没办法修改这个文件在服务器的名称
*/
<span style="white-space:pre"> </span>// [formData appendPartWithFileURL:fileUrl name:@"userfile" error:NULL];
/**
FileURL:要上传的文件的url
name: 上传到服务器,接受这个图片的字段名
fileName : 这个文件在服务器的名称
mimeType: 表示要上传的文件的类型
格式: 大类/小类
JPG image/jpg
PNG image/png
JSON application/json
*/
//第二个参数代表的是键,要与接口文档保持一致 [formData appendPartWithFileData:data name:@"filename" fileName:@"1.jpeg" mimeType:@"image/jpeg"]; } success:^(NSURLSessionDataTask *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"Error: %@", error); }];
5)AFNetWorkIng的其它用法详解
http://blog.sina.com.cn/s/blog_af73e7a70102v0l0.html
http://blog.csdn.net/daiyelang/article/details/38421341
使用注意事项
1)在使用AFNetworking的时候,如果你的url中出现中文字符崩溃,你需要把中文转换一下urlString = [urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];