+++++++++++++++++AFN++HTTP常用设置+++++++++++++++++++++++++
////http常用设置
//-(AFHTTPSessionManager *)httpNormalConfig{
// //待超时时间
// NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
// config.timeoutIntervalForRequest =20.0;
//
// AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
// manager.requestSerializer=[AFHTTPRequestSerializer serializer];
// manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
// manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
// manager.securityPolicy.validatesDomainName = NO;//不验证证书的域名
// manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml", @"text/plain; charset=utf-8", nil];
// [manager.requestSerializer setValue:@"text/html;charset=utf-8"
// forHTTPHeaderField:@"Content-Type"]; //请求的URL所用的编码类型;如果不设置,默认的是json,客户端发送的数据类型
// [manager.requestSerializer
// setValue:@"application/json" forHTTPHeaderField:@"Accept"];//客户端或浏览器可以接受的数据类型
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"username" password:@"password"];//带用户验证
//
//
// /*
//
// //下列请求头参数根据你自己的后台接口要求来设置
// [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
// [manager.requestSerializer setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
// [manager.requestSerializer setValue:@"keep-alive" forHTTPHeaderField:@"Connection"];
// [manager.requestSerializer setValue:@"zh-cn" forHTTPHeaderField:@"language"];
// //如果报接受类型不一致请替换一致text/html或别的
// manager.responseSerializer.acceptableContentTypes = nil;
// 设置向请求内容的类型
// [manager.requestSerializer setValue:@"application/json;charset=utf-8"forHTTPHeaderField:@"Content-Type"];//这个和
// 设置请求内容的长度
// [manager.requestSerializer setValue:[NSStringstringWithFormat:@"%ld", (unsignedlong)[jsonStr length]] forHTTPHeaderField:@"Content-Length"];
// 设置请求的编码类型
// [manager.requestSerializer setValue:@"gzip"forHTTPHeaderField:@"Content-Encoding"];
// */
//
//
// return manager;
//}
一般请求封装:
HTTPmanager设置
#import "AFHTTPSessionManager.h"
NS_ASSUME_NONNULL_BEGIN
@interface QMWNHttpM : AFHTTPSessionManager
+(AFHTTPSessionManager *)sharehttpsessionmanager;
@end
NS_ASSUME_NONNULL_END
#import "QMWNHttpM.h"
@implementation QMWNHttpM
+(AFHTTPSessionManager *)sharehttpsessionmanager{
static QMWNHttpM *httpsessionmanager=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
httpsessionmanager=[[QMWNHttpM alloc]init];
httpsessionmanager.requestSerializer.timeoutInterval=20.0;
httpsessionmanager.requestSerializer=[AFHTTPRequestSerializer serializer];
httpsessionmanager.responseSerializer = [AFHTTPResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
httpsessionmanager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
httpsessionmanager.securityPolicy.validatesDomainName = NO;//不验证证书的域名
httpsessionmanager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[httpsessionmanager.requestSerializer setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];//;charset=utf-8
// [httpsessionmanager.requestSerializer setValue:@"application/x-www-form-urlencoded"
// forHTTPHeaderField:@"Content-Type"];
[httpsessionmanager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"13913002628" password:@"111111a"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"15850692168" password:@"111111a"];
[httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:[HximCommanManager sharedCommonManager].username password:[HximCommanManager sharedCommonManager].password];
SLog(@"shifoudengu-用户名-%@",[HximCommanManager sharedCommonManager].username);
});
return httpsessionmanager;
}
@end
--------------
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^ProgressBlock) (NSProgress* progress);
typedef void(^SuccessBlock) (NSURLSessionDataTask *task, id responseObject);
typedef void(^FailureBlock) (NSURLSessionDataTask *task, NSError *error);
@interface QMWNHttpRequestManager : NSObject
+(instancetype)sharedManager;
//1.put 把请求的参数放到body中,自己用原生的封装
-(void)putjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//2.1.把请求的参数放到body中,自己用原生的封装
-(void)getjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//2.把请求的参数放到body中,自己用原生的封装
-(void)jsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//3.put修改数据
-(void)putnormaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//4.get请求数据
-(void)normaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//5.post 请求数据
-(void)lyRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//6.普通的原生请求
-(void)nativeRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
@end
NS_ASSUME_NONNULL_END
#import "QMWNHttpRequestManager.h"
#import "AFNetworking.h"
#import "QMWNHttpM.h"
@interface QMWNHttpRequestManager()
@property(nonatomic,strong) NSURLSessionDownloadTask *downloadTask;
@property(nonatomic,strong)AFURLSessionManager *manager;
@property(nonatomic,strong)NSData *resumeData;
@end
@implementation QMWNHttpRequestManager
+(instancetype)sharedManager{
static QMWNHttpRequestManager *httpRequestManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
httpRequestManager=[[QMWNHttpRequestManager alloc]init];
});
return httpRequestManager;
}
//http常用设置,
-(AFHTTPSessionManager *)httpNormalConfig{
//待超时时间
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.timeoutIntervalForRequest =20.0;
AFHTTPSessionManager *httpsessionmanager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
httpsessionmanager.requestSerializer=[AFHTTPRequestSerializer serializer];
httpsessionmanager.responseSerializer = [AFHTTPResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
httpsessionmanager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
httpsessionmanager.securityPolicy.validatesDomainName = NO;//不验证证书的域名
httpsessionmanager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[httpsessionmanager.requestSerializer setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];//;charset=utf-8
// [httpsessionmanager.requestSerializer setValue:@"application/x-www-form-urlencoded"
// forHTTPHeaderField:@"Content-Type"];
[httpsessionmanager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"13913002628" password:@"111111a"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"15850692168" password:@"111111a"];
[httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:[HximCommanManager sharedCommonManager].username password:[HximCommanManager sharedCommonManager].password];
SLog(@"shifoudengu-用户名-%@",[HximCommanManager sharedCommonManager].username);
return httpsessionmanager;
}
//1.put 把请求的参数放到body中,自己用原生的封装
-(void)putjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"PUT" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
NSLog(@"参数---%@",params);
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
SLog(@"responseobject---%@",responseObject);
if(responseObject!=nil){
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}else {
SLog(@"无数据");
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],@{@"backdata":@"无数据"});
}
}
}]resume];
}
//2.1.把请求的参数放到body中,自己用原生的封装
-(void)getjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"GET" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
NSLog(@"参数---%@",params);
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}]resume];
}
//2.把请求的参数放到body中,自己用原生的封装
-(void)jsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
NSLog(@"参数---%@",params);
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}]resume];
}
//3.put修改数据
-(void)putnormaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
// __weak typeof(manager) weak_manager = manager;
NSLog(@"参数---%@",params);
[manager PUT:url parameters:params headers:@{} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
// SLog(@"dict--%@",dict);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
}];
}
//4.get请求数据
-(void)normaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
// AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
AFHTTPSessionManager *manager = [self httpNormalConfig];
// __weak typeof(manager) weak_manager = manager;
NSLog(@"参数---%@",params);
[manager GET:url parameters:params headers:@{} progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
// SLog(@"dict--%@",dict);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
// [weak_manager invalidateSessionCancelingTasks:YES];
}];
}
//5.post 请求数据
-(void)lyRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
// AFHTTPSessionManager *manager = [self httpNormalConfig];
// __weak typeof(manager) weak_manager = manager;
// NSLog(@"---manger--%@",manager);
NSLog(@"参数---%@",params);
[manager POST:url parameters:params headers:@{} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
// SLog(@"数据--%@",str);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
// [weak_manager invalidateSessionCancelingTasks:YES];
}];
}
//6.普通的原生请求,AFN参数会有问题
-(void)nativeRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
NSString *jsonstr = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:params options:0 error:nil] encoding:NSUTF8StringEncoding];
AFURLSessionManager *manager=[[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSMutableURLRequest *request=[[AFJSONRequestSerializer serializer]requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
request.timeoutInterval=20;
[request setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Accept"];
//设置body
[request setHTTPBody:[jsonstr dataUsingEncoding:NSUTF8StringEncoding]];
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
SLog(@"数据--%@",str);
}]resume];
}
@end
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^ProgressBlock) (NSProgress* progress);
typedef void(^SuccessBlock) (NSURLSessionDataTask *task, id responseObject);
typedef void(^FailureBlock) (NSURLSessionDataTask *task, NSError *error);
@interface QMWNHttpRequestManager : NSObject
+(instancetype)sharedManager;
//把请求的参数放到body中,自己用原生的封装
-(void)jsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//3.put修改数据
-(void)putnormaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//4.get请求数据
-(void)normaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//5.post 请求数据
-(void)lyRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
//6.普通的原生请求
-(void)nativeRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock;
@end
NS_ASSUME_NONNULL_END
#import "QMWNHttpRequestManager.h"
#import "AFNetworking.h"
#import "QMWNHttpM.h"
@interface QMWNHttpRequestManager()
@property(nonatomic,strong) NSURLSessionDownloadTask *downloadTask;
@property(nonatomic,strong)AFURLSessionManager *manager;
@property(nonatomic,strong)NSData *resumeData;
@end
@implementation QMWNHttpRequestManager
+(instancetype)sharedManager{
static QMWNHttpRequestManager *httpRequestManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
httpRequestManager=[[QMWNHttpRequestManager alloc]init];
});
return httpRequestManager;
}
//http常用设置,
-(AFHTTPSessionManager *)httpNormalConfig{
//待超时时间
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.timeoutIntervalForRequest =20.0;
AFHTTPSessionManager *httpsessionmanager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
httpsessionmanager.requestSerializer=[AFHTTPRequestSerializer serializer];
httpsessionmanager.responseSerializer = [AFHTTPResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
httpsessionmanager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
httpsessionmanager.securityPolicy.validatesDomainName = NO;//不验证证书的域名
httpsessionmanager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[httpsessionmanager.requestSerializer setValue:@"application/json"
forHTTPHeaderField:@"Content-Type"];//;charset=utf-8
// [httpsessionmanager.requestSerializer setValue:@"application/x-www-form-urlencoded"
// forHTTPHeaderField:@"Content-Type"];
[httpsessionmanager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"13913002628" password:@"111111a"];
// [httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"15850692168" password:@"111111a"];
[httpsessionmanager.requestSerializer setAuthorizationHeaderFieldWithUsername:[HximCommanManager sharedCommonManager].username password:[HximCommanManager sharedCommonManager].password];
SLog(@"shifoudengu-用户名-%@",[HximCommanManager sharedCommonManager].username);
return httpsessionmanager;
}
//1.put 把请求的参数放到body中,自己用原生的封装PUT
-(void)putjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"PUT" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
NSLog(@"参数---%@",params);
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
SLog(@"responseobject---%@",responseObject);
if(responseObject!=nil){
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}else {
SLog(@"无数据");
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],@{@"backdata":@"无数据"});
}
}
}]resume];
}
//2.1.把请求的参数放到body中,自己用原生的封装
-(void)getjsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"GET" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
NSLog(@"参数---%@",params);
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
// SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}]resume];
}
//把请求的参数放到body中,自己用原生的封装
-(void)jsonpostRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [self httpNormalConfig];
manager.requestSerializer=[AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];//安全策略 AFSSLPinningModeCertificate(校验证书)
manager.securityPolicy.allowInvalidCertificates = YES;//客户端是否信任非法证书
manager.securityPolicy.validatesDomainName =NO;//不验证证书的域名
manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/xml",@"text/css", @"text/plain;charset=utf-8", nil];
[manager.requestSerializer setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer
setValue:@"application/json" forHTTPHeaderField:@"Accept"];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
[request addValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
NSData *body= [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil];
[request setHTTPBody:body];
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
// NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSData *data = [NSJSONSerialization dataWithJSONObject:responseObject
options:0 error:NULL];
NSDictionary *dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
SLog(@"---%@",dict);
if(dict){
if(successBlock){
successBlock([[NSURLSessionDataTask alloc]init],dict);
}
}
}]resume];
}
//3.put修改数据
-(void)putnormaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
// __weak typeof(manager) weak_manager = manager;
[manager PUT:url parameters:params headers:@{} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
SLog(@"dict--%@",dict);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
}];
}
//4.get请求数据
-(void)normaldownloadWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
// __weak typeof(manager) weak_manager = manager;
[manager GET:url parameters:params headers:@{} progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
SLog(@"dict--%@",dict);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
// [weak_manager invalidateSessionCancelingTasks:YES];
}];
}
//5.post 请求数据
-(void)lyRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
AFHTTPSessionManager *manager = [QMWNHttpM sharehttpsessionmanager];
// AFHTTPSessionManager *manager = [self httpNormalConfig];
// __weak typeof(manager) weak_manager = manager;
// NSLog(@"---manger--%@",manager);
NSLog(@"参数---%@",params);
[manager POST:url parameters:params headers:@{} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
SLog(@"数据--%@",str);
if(dict){
if(successBlock){
successBlock(task,dict);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(task,error);
// [weak_manager invalidateSessionCancelingTasks:YES];
}];
}
//6.普通的原生请求,AFN参数会有问题
-(void)nativeRequestWithUrl:(NSString *)url
params:(NSDictionary *)params
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock{
NSString *jsonstr = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:params options:0 error:nil] encoding:NSUTF8StringEncoding];
AFURLSessionManager *manager=[[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSMutableURLRequest *request=[[AFJSONRequestSerializer serializer]requestWithMethod:@"POST" URLString:url parameters:nil error:nil];
request.timeoutInterval=20;
[request setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json;charset=utf-8"
forHTTPHeaderField:@"Accept"];
//设置body
[request setHTTPBody:[jsonstr dataUsingEncoding:NSUTF8StringEncoding]];
[[manager dataTaskWithRequest:request uploadProgress:^(NSProgress * _Nonnull uploadProgress) {
} downloadProgress:^(NSProgress * _Nonnull downloadProgress) {
} completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];//网页二进制数据转换成字符串
NSData *data=[str dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingMutableLeaves error:nil];
SLog(@"数据--%@",str);
}]resume];
}
@end
***取消已经发送的请求
if ([manager.tasks count] > 0) {
[manager.tasks makeObjectsPerformSelector:@selector(cancel)];
SLog(@"tasks = %@",manager.tasks);
}
manager里面的tasks装的就是正在执行的网络请求。执行cancel后,tasks就会清空,网络请求会进入失败的状态,然后响应failure block,得到一个error的信息,表示请求已经成功取消了。