260 lines
12 KiB
Objective-C
260 lines
12 KiB
Objective-C
//
|
||
// NetworkingTool.m
|
||
// yunbaolive
|
||
//
|
||
// Created by 阴天遮住侧脸 on 2020/6/11.
|
||
// Copyright © 2020 cat. All rights reserved.
|
||
// https://blog.csdn.net/chase20150628/article/details/91575154
|
||
|
||
#import "NetworkingTool.h"
|
||
|
||
|
||
@implementation NetworkingTool
|
||
|
||
|
||
#pragma mark - POST
|
||
+ (nullable NSURLSessionDataTask *)BasePOST_Host:(NSString *)host hostPath:(NSString *)hostPath parameters:(nullable id)paramDic headers:(nullable NSDictionary <NSString *, NSString *> *)headerDic progress:(nullable void (^)(NSProgress *progress))progressBlock success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
|
||
|
||
NSString *url = [host stringByAppendingFormat:@"/%@", hostPath];
|
||
return [self BasePOST:url parameters:paramDic headers:headerDic progress:progressBlock success:successBlock failure:failureBlock];
|
||
}
|
||
|
||
/// POST请求(创建并运行一个带有 "POST "请求的 "NSURLSessionDataTask"。)
|
||
/// @param URLString 完整URLString
|
||
/// @param paramDic 参数
|
||
/// @param headerDic 附加到这个请求的默认头部的头部
|
||
/// @param progressBlock 进度回调
|
||
/// @param successBlock 成功回调
|
||
/// @param failureBlock 失败回调
|
||
+ (nullable NSURLSessionDataTask *)BasePOST:(NSString *)URLString parameters:(nullable id)paramDic headers:(nullable NSDictionary <NSString *, NSString *> *)headerDic progress:(nullable void (^)(NSProgress *progress))progressBlock success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
|
||
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
|
||
return [sessionManager POST:URLString parameters:paramDic headers:headerDic progress:progressBlock success:successBlock failure:failureBlock];
|
||
|
||
}
|
||
|
||
#pragma mark - GET
|
||
+ (nullable NSURLSessionDataTask *)BaseGet_Host:(NSString *)host hostPath:(NSString *)hostPath parameters:(NSDictionary *)paramDic headers:(nullable NSDictionary<NSString *,NSString *> *)headerDic progress:(nullable void (^)(NSProgress *progress))progressBlock success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
|
||
|
||
NSString *url = [host stringByAppendingFormat:@"/%@", hostPath];
|
||
return [self BaseGet:url parameters:paramDic headers:headerDic progress:progressBlock success:successBlock failure:failureBlock];
|
||
}
|
||
/// GET请求
|
||
/// @param URLString URLString
|
||
/// @param paramDic 参数
|
||
/// @param headerDic 附加到这个请求的默认头部的头部
|
||
/// @param downloadProgress 进度回调
|
||
/// @param successBlock 成功回调
|
||
/// @param failureBlock 失败回调
|
||
+ (nullable NSURLSessionDataTask *)BaseGet:(NSString *)URLString parameters:(NSDictionary *)paramDic headers:(nullable NSDictionary<NSString *,NSString *> *)headerDic progress:(nullable void (^)(NSProgress *progress))progressBlock success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
|
||
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
|
||
return [sessionManager GET:URLString parameters:paramDic headers:headerDic progress:progressBlock success:successBlock failure:failureBlock];
|
||
|
||
}
|
||
|
||
#pragma mark - 下载
|
||
+ (nullable NSURLSessionDownloadTask *)downloadFileWithURL:(NSString *)urlString saveFilePath:(NSString *)savePath progress:(void (^)(NSProgress *downloadProgress))downloadProgressBlock completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler {
|
||
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
|
||
NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
|
||
|
||
//返回一个下载任务对象
|
||
NSURLSessionDownloadTask *downTask = [sessionManager downloadTaskWithRequest:requset progress:^(NSProgress * _Nonnull downloadProgress) {
|
||
// completedUnitCount 下载的大小
|
||
// totalUnitCount文件的总大小
|
||
NSLog(@"%lld----%lld",downloadProgress.completedUnitCount,downloadProgress.totalUnitCount);
|
||
|
||
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
|
||
|
||
NSString *fullPath =[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingString:response.suggestedFilename];
|
||
NSLog(@"targetPath-:%@---fullPath:-%@",targetPath,fullPath);
|
||
|
||
//这个block 需要返回一个目标 地址 存储下载的文件
|
||
// return [NSURL fileURLWithPath:fullPath];
|
||
return [NSURL fileURLWithPath:savePath];
|
||
|
||
} completionHandler:completionHandler];
|
||
|
||
//启动下载任务--开始下载
|
||
[downTask resume];
|
||
|
||
return downTask;
|
||
}
|
||
|
||
#pragma mark - 上传
|
||
|
||
/// upload上传文件
|
||
/// @param filePath 文件路径
|
||
/// @param data 文件二进制数据
|
||
/// @param uploadProgress 上传进度回调
|
||
/// @param completionHandler 上传完成回调
|
||
+ (nullable NSURLSessionUploadTask *)upload:(NSString *)filePath fileData:(NSData *)data progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler {
|
||
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
|
||
NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:filePath]];
|
||
|
||
NSURLSessionUploadTask *uploadTask = [sessionManager uploadTaskWithRequest:requset fromData:data progress:uploadProgress completionHandler:completionHandler];
|
||
|
||
/*
|
||
NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost"]];
|
||
UIImage *image = [UIImage imageNamed:@"pic.jpg"];
|
||
NSData *imageData = UIImageJPEGRepresentation(image, 0.8);
|
||
NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:requset fromData:imageData progress:^(NSProgress * _Nonnull uploadProgress) {
|
||
|
||
NSLog(@"%lld",uploadProgress.completedUnitCount);
|
||
|
||
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
|
||
|
||
NSLog(@"error:%@",error.description);
|
||
NSLog(@"%@",responseObject);
|
||
|
||
|
||
}];
|
||
*/
|
||
|
||
[uploadTask resume];
|
||
|
||
return uploadTask;
|
||
}
|
||
|
||
|
||
|
||
/// 上传数据 - POST请求 - Form表单提交数据(创建并运行一个包含多部分 "POST "请求的 "NSURLSessionDataTask"。)
|
||
/// @param URLString URLString
|
||
/// @param paramDic 参数
|
||
/// @param headerDic 附加到这个请求的默认头部的头部
|
||
/// @param block 一个接受单个参数并将数据附加到HTTP body的块。block参数是一个采用`AFMultipartFormData`协议的对象。
|
||
/// @param uploadProgress 上传进度回调
|
||
/// @param successBlock 成功回调 ---> id
|
||
/// @param failureBlock 失败回调
|
||
+ (nullable NSURLSessionDataTask *)upload_BasePOST:(NSString *)URLString parameters:(nullable id)paramDic headers:(nullable NSDictionary <NSString *, NSString *> *)headerDic constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
|
||
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
|
||
return [sessionManager POST:URLString parameters:paramDic headers:headerDic constructingBodyWithBlock:block progress:uploadProgress success:successBlock failure:failureBlock];
|
||
|
||
/** constructingBodyWithBlock中:
|
||
//上传数据
|
||
方式1
|
||
UIImage *image = [UIImage imageNamed:@"pic.jpg"];
|
||
NSData *imageData = UIImageJPEGRepresentation(image, 0.7);
|
||
//要上传的数据 和 上传数据服务器对应的名称
|
||
[formData appendPartWithFormData:imageData name:@"file"];
|
||
|
||
方式2
|
||
FileData要上传的数据
|
||
name 服务器规定
|
||
fileName 上传文件的名称
|
||
mimeType类型
|
||
[formData appendPartWithFileData:imageData name:@"file" fileName:@"100.jpg" mimeType:@"image/jpg"];
|
||
|
||
//本地文件的路径 方式3
|
||
NSURL *url = [NSURL fileURLWithPath:@"路径"];
|
||
[formData appendPartWithFileURL:url name:@"file" error:nil];
|
||
|
||
*/
|
||
|
||
}
|
||
|
||
#pragma mark - 网络状态全局监听
|
||
/// 网络状态全局监听, 内部会发送状态改变通知!
|
||
+ (void)setNetStatusObserver {
|
||
AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager];
|
||
/**
|
||
AFNetworkReachabilityStatusUnknown = -1,
|
||
AFNetworkReachabilityStatusNotReachable = 0,
|
||
AFNetworkReachabilityStatusReachableViaWWAN = 1,
|
||
AFNetworkReachabilityStatusReachableViaWiFi = 2,
|
||
*/
|
||
[netManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){
|
||
switch (status) {
|
||
case AFNetworkReachabilityStatusUnknown:
|
||
//未知
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:NetworkStatusChangKey_Unknown object:nil];
|
||
break;
|
||
case AFNetworkReachabilityStatusNotReachable:
|
||
//没有网络
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:NetworkStatusChangKey_NotReachable object:nil];
|
||
break;
|
||
case AFNetworkReachabilityStatusReachableViaWWAN:
|
||
//蜂窝
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:NetworkStatusChangKey_ReachableViaWWAN object:nil];
|
||
break;
|
||
case AFNetworkReachabilityStatusReachableViaWiFi:
|
||
//WiFi
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:NetworkStatusChangKey_ReachableViaWiFi object:nil];
|
||
break;
|
||
}
|
||
}];
|
||
[netManager startMonitoring]; //开始监听
|
||
}
|
||
|
||
#pragma mark - Set_Serializer
|
||
///设置-请求格式
|
||
+ (void)setRequestSerializer:(CYHRequestSerializer)requestSerializer {
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
sessionManager.requestSerializer = requestSerializer == CYHRequestSerializerHTTP ? [AFHTTPRequestSerializer serializer] : [AFJSONRequestSerializer serializer];
|
||
}
|
||
///设置 - 响应格式
|
||
+ (void)setResponseSerializer:(CYHResponseSerializer)responseSerializer {
|
||
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
|
||
sessionManager.responseSerializer = responseSerializer == CYHResponseSerializerHTTP ? [AFHTTPResponseSerializer serializer] : [AFJSONResponseSerializer serializer];
|
||
}
|
||
|
||
#pragma mark - Set_Timeout
|
||
+ (void)setRequestTimeout:(NSTimeInterval)interval {
|
||
[AFHTTPSessionManager manager].requestSerializer.timeoutInterval = interval;
|
||
}
|
||
|
||
#pragma mark - Set_SecurityPolicy安全策略
|
||
+ (void)setSecurityPolicy:(AFSecurityPolicy *)securityPolicy {
|
||
[AFHTTPSessionManager manager].securityPolicy = securityPolicy;
|
||
}
|
||
|
||
#pragma mark - 会话
|
||
+ (AFHTTPSessionManager *)sessionManager {
|
||
return [AFHTTPSessionManager manager];
|
||
}
|
||
/*
|
||
+ (instancetype)shared
|
||
{
|
||
return [[self alloc] init];
|
||
}
|
||
|
||
// 创建静态对象 防止外部访问
|
||
static NetworkingTool *_instance;
|
||
+ (instancetype)allocWithZone:(struct _NSZone *)zone
|
||
{
|
||
static dispatch_once_t onceToken;
|
||
dispatch_once(&onceToken, ^{
|
||
if (_instance == nil) {
|
||
_instance = [super allocWithZone:zone];
|
||
|
||
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
|
||
// session.requestSerializer = [AFJSONRequestSerializer serializer];
|
||
_instance->_session = session;
|
||
}
|
||
});
|
||
return _instance;
|
||
}
|
||
|
||
// 为了严谨,也要重写copyWithZone 和 mutableCopyWithZone
|
||
-(id)copyWithZone:(NSZone *)zone
|
||
{
|
||
return _instance;
|
||
}
|
||
|
||
-(id)mutableCopyWithZone:(NSZone *)zone
|
||
{
|
||
return _instance;
|
||
}
|
||
*/
|
||
@end
|
||
|
||
|