//
// HttpTool.h
// 封装整个项目的GET\POST请求
#import <Foundation/Foundation.h>
@interface HttpTool : NSObject
/**
* 发送一个POST请求
*
* @param url 请求路径
* @param params 请求参数
* @param success 请求成功后的回调
* @param failure 请求失败后的回调
*/
+(void)postWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(id json))success failure:(void(^)(NSError *error))failure;
/**
* 发送一个POST请求(上传文件)
*
* @param url 请求路径
* @param params 请求参数
* @param formData 文件
* @param success 请求成功后的回调
* @param failure 请求失败后的回调
*/
+(void)postWithURL:(NSString *)url params:(NSDictionary *)params formDataArray:(NSArray *)formDataArray success:(void(^)(id json))success failure:(void(^)(NSError *error))failure;
/**
* 发送一个GET请求
*
* @param url 请求路径
* @param params 请求参数
* @param success 请求成功后的回调
* @param failure 请求失败后的回调
*/
+(void)getWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(id json))success failure:(void(^)(NSError *error))failure;
@end
/**
* 用来封装文件数据的模型
*/
@interface FormData : NSObject
/** 文件数据 */
@property(nonatomic,strong)NSData *data;
/** 参数名 */
@property(nonatomic,copy)NSString *name;
/** 文件名 */
@property(nonatomic,copy)NSString *filename;
/** 文件MIME类型 */
@property(nonatomic,copy)NSString *mimeType;
@end
//
// HttpTool.m
#import "HttpTool.h"
#import "AFNetworking.h"
@implementation HttpTool
+(void)postWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
//1.创建请求管理对象
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//2.发送请求
[mgr POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
+ (void)postWithURL:(NSString *)url params:(NSDictionary *)params formDataArray:(NSArray *)formDataArray success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
//1.创建请求管理对象
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//2.发送请求
[mgr POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> totalformData) {
for (FormData *fd in formDataArray) {
[totalformData appendPartWithFileData:fd.data name:fd.name fileName:fd.filename mimeType:fd.mimeType];
}
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
+(void)getWithURL:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
//1.创建请求管理对象
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//2.发送请求
[mgr GET:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
@end
/**
* 用来封装文件数据的模型
*/
@implementation FormData
@end
使用示例:
/**
* 加载微薄数据
*/
- (void)setupStatusData
{
//1.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = [AccountTool account].access_token;
params[@"count"] = @10;
//2.发送
[HttpTool getWithURL:@"https://api.weibo.com/2/statuses/home_timeline.json" params:params success:^(id json) {
//将字典数组转为模型数组(里边放的就是Status模型)
NSArray *statusArray = [Status objectArrayWithKeyValuesArray:json[@"statuses"]];
//创建frame模型对象
NSMutableArray *statusFrameArray = [NSMutableArray array];
for (Status *status in statusArray) {
StatusFrame *statusF = [[StatusFrame alloc]init];
//传递微博模型数据
statusF.status = status;
[statusFrameArray addObject:statusF];
}
//赋值
self.statusFrames = statusFrameArray;
//5.刷新表格
[self.tableView reloadData];
} failure:^(NSError *error) {
[MBProgressHUD showError:@"加载微博数据失败"];
}];
}
/**
* 发送带图片的微博
*/
- (void)sendWithImage
{
//1.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"status"] = self.textView.text;
params[@"access_token"] = [AccountTool account].access_token;
//2.封装文件参数
NSMutableArray *formDataArray = [NSMutableArray array];
NSArray *images = [self.photosView totalImages];
for (UIImage *image in images) {
FormData *formData = [[FormData alloc] init];
formData.data = UIImageJPEGRepresentation(image, 0.2);
formData.name = @"pic";
formData.mimeType = @"image/jpeg";
formData.filename = @"";
[formDataArray addObject:formData];
}
//3.发送请求
[HttpTool postWithURL:@"https://upload.api.weibo.com/2/statuses/upload.json" params:params formDataArray:formDataArray success:^(id json) {
[MBProgressHUD showSuccess:@"发送成功"];
} failure:^(NSError *error) {
[MBProgressHUD showError:@"发送失败"];
}];
}
/**
* 发送没有图片的微博
*/
- (void)sendWithoutImage
{
//1.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"status"] = self.textView.text;
params[@"access_token"] = [AccountTool account].access_token;
//3.发送请求
[HttpTool postWithURL:@"https://api.weibo.com/2/statuses/update.json" params:params success:^(id json) {
[MBProgressHUD showSuccess:@"发送成功"];
} failure:^(NSError *error) {
[MBProgressHUD showError:@"发送失败"];
}];
}