cdts/xdts-ios 3/TreeHole/CYHResetCode/CYH/NetworkingTool/NetworkingTool.m
2023-07-27 09:20:00 +08:00

260 lines
12 KiB
Objective-C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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