#import
#import "AFNetworking.h"
@interface HttpRequest : NSObject
typedef void(^success)(NSURLSessionDataTask *task, id responseObject);
typedef void(^failure)(NSURLSessionDataTask *task, NSError *error);
+ (void)POST:(NSString *)URLString
parameters:(NSMutableDictionary *)parameters andSuccess:(success)successBlock andFailure:(failure)failureBlock;
@end
#import "HttpRequest.h"
#define kTimeOutInterval 20.0f
@implementation HttpRequest
+(AFHTTPSessionManager *)manager
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 超時時間
manager.requestSerializer.timeoutInterval = kTimeOutInterval;
// 聲明上傳的是json格式的參數,需要你和后臺約定好,不然會出現后臺無法獲取到你上傳的參數問題
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上傳普通格式
//? ? manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上傳JSON格式
// 聲明獲取到的數據格式
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不會解析,數據是data,需要自己解析
//? ? manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN會JSON解析返回的數據
// 個人建議還是自己解析的比較好,有時接口返回的數據不合格會報3840錯誤,大致是AFN無法解析返回來的數據
return manager;
}
+ (void)POST:(NSString *)URLString
parameters:(NSMutableDictionary *)parameters andSuccess:(success)successBlock andFailure:(failure)failureBlock
{
// 創建請求類
AFHTTPSessionManager *manager = [self manager];
[manager POST:URLString
parameters:parameters
progress:^(NSProgress * _Nonnull uploadProgress) {
// 這里可以獲取到目前數據請求的進度
} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {
// 請求成功
if (successBlock) {
successBlock(task,responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 請求失敗
if (failureBlock) {
failureBlock(task,error);
}
}];
}
@end