这里使用到了常用的全局Block,可以写pch文件中
typedef void (^ReturnValueBlock) (id returnValue);
typedef void (^ErrorCodeBlock) (id errorCode);
typedef void (^FailureBlock)(void);
typedef void (^NetWorkBlock)(BOOL netConnetState);
下面就是5种请求常用的封装
GET
#pragma mark -
#pragma mark - -- > GET请求方式
+ (void) NetRequestGETWithRequestURL: (NSString *) requestURLString
WithParameter: (NSDictionary *) parameter
WithReturnValeuBlock: (ReturnValueBlock) block
WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
WithFailureBlock: (FailureBlock) failureBlock
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
if (cerSet.count == 0){
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy;
} else {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
}
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 30;
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager.requestSerializer setValue:@"TOKEN" forHTTPHeaderField:@"X-Access-Token"];
[manager GET:requestURLString parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
block(resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
POST
#pragma mark -
#pragma mark - -- > POST请求方式
+ (void) NetRequestPOSTWithRequestURL: (NSString *) requestURLString
WithParameter: (NSDictionary *) parameter
WithReturnValeuBlock: (ReturnValueBlock) block
WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
WithFailureBlock: (FailureBlock) failureBlock
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
if (cerSet.count == 0){
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy;
}else{
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
}
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 30;
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager.requestSerializer setValue:@"" forHTTPHeaderField:@"X-Access-Token"];
[manager POST:requestURLString parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* 将得到的 JSON 数据转换成 NSDictionary 字典 */
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
block(resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
PUT
#pragma mark -
#pragma mark - -- > PUT请求方式
+ (void) NetRequestPUTWithRequestURL:(NSString *)requestURLString
WithParameter:(NSDictionary *)parameter
WithReturnValeuBlock:(ReturnValueBlock)block
WithErrorCodeBlock:(ErrorCodeBlock)errorBlock
WithFailureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
if (cerSet.count == 0){
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy;
}else{
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
}
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 30;
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager.requestSerializer setValue:@"" forHTTPHeaderField:@"X-Access-Token"];
[manager PUT:requestURLString parameters:parameter success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* 将得到的 JSON 数据转换成 NSDictionary 字典 */
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
block(resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
DELETE
#pragma mark -
#pragma mark - -- > DLETE请求方式
+ (void) NetRequestDELETEWithRequestURL:(NSString *)requestURLString
WithParameter:(NSDictionary *)parameter
WithReturnValeuBlock:(ReturnValueBlock)block
WithErrorCodeBlock:(ErrorCodeBlock)errorBlock
WithFailureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
if (cerSet.count == 0){
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy;
}else{
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
}
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 30;
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager.requestSerializer setValue:@"" forHTTPHeaderField:@"X-Access-Token"];
[manager DELETE:requestURLString parameters:parameter success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* 将得到的 JSON 数据转换成 NSDictionary 字典 */
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
block(resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
图片上传
#pragma mark -
#pragma mark - -- > 图片头像上传请求方式
+ (void) NetRequestPOSTUploadImageWithRequestURL: (NSString *) requestURLString
WithParameter: (NSDictionary *) parameter
WithImage: (UIImage *) image
WithReturnValeuBlock: (ReturnValueBlock) block
WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
WithFailureBlock: (FailureBlock) failureBlock
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSSet <NSData *> *cerSet = [AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]];
if (cerSet.count == 0){
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
manager.securityPolicy = securityPolicy;
}else{
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:cerSet];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
}
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval = 30;
manager.requestSerializer.HTTPShouldHandleCookies = YES;
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
[manager.requestSerializer setValue:@"" forHTTPHeaderField:@"X-Access-Token"];
[manager POST:requestURLString parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData *data = UIImagePNGRepresentation(image);
//这里注意UIImageJPEGRepresentation 详情看下图格式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
[formData appendPartWithFileData:data name:@"files" fileName:fileName mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
/* 将得到的 JSON 数据转换成 NSDictionary 字典 */
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
block(resultDic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
到此就是常用的5种请求就完成了。