將HTTPS請(qǐng)求封裝在一個(gè)類里面,方便調(diào)用(前提是在項(xiàng)目里面要導(dǎo)入AFNetworking第三方庫(kù))
.h文件
#import
#import "AFNetworking.h"
@interface YDHTTPSManager : NSObject
/**
* 發(fā)送一個(gè)HTTPS的GET請(qǐng)求
* @param url 請(qǐng)求路徑
* @param params 請(qǐng)求參數(shù)
* @param success 請(qǐng)求成功后的回調(diào)
* @param failure 請(qǐng)求失敗后的回調(diào)
*/
+ (void)GET:(NSString *)URLString parameters:(id)parameters success:(void(^)(id responseObject))sucess failure:(void(^)(NSError *error))failure;
/**
* 發(fā)送一個(gè)HTTPS的POST請(qǐng)求
* @param url 請(qǐng)求路徑
* @param params 請(qǐng)求參數(shù)
* @param success 請(qǐng)求成功后的回調(diào)
* @param failure 請(qǐng)求失敗后的回調(diào)
*/
+(void)post:(NSString *)UrlString params:(NSDictionary *)params success:(void (^)(id json))success failure:(void(^)(NSError *error))failure;
/**
* 發(fā)送一個(gè)HTTPS的POST請(qǐng)求(上傳圖片)
* @param url 請(qǐng)求路徑
* @param params 請(qǐng)求參數(shù)
* @param success 請(qǐng)求成功后的回調(diào)
* @param failure 請(qǐng)求失敗后的回調(diào)
*/
+(void)post:(NSString *)UrlString params:(NSDictionary *)params formData:(void (^)(idformData))block prodress:(void(^)(NSProgress *uploadProgress))progress success:(void (^)(id json))success failure:(void(^)(NSError *error))failure;
.m文件
#import "YDHTTPSManager.h"
#import "AFNetworking.h"
@implementation YDHTTPSManager
+ (void)GET:(NSString *)URLString parameters:(id)parameters success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure{
AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
// 設(shè)置網(wǎng)絡(luò)請(qǐng)求超時(shí)時(shí)間
manger.requestSerializer.timeoutInterval = 10;
[manger.securityPolicy setAllowInvalidCertificates:YES];
// https ssl 驗(yàn)證。
[manger setSecurityPolicy:[self customSecurityPolicy]];
// 請(qǐng)求
manger.requestSerializer=[AFJSONRequestSerializer serializer];
// 響應(yīng)( 返回格式 )
manger.responseSerializer = [AFHTTPResponseSerializer serializer];
NSString *encoded = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[manger GET:encoded parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//如果請(qǐng)求成功的話將responseObject保存在sucess Block中
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if(failure) {
failure(error);
}
}];
}
+(void)post:(NSString *)UrlString params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure{
AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
// 設(shè)置網(wǎng)絡(luò)請(qǐng)求超時(shí)時(shí)間
manger.requestSerializer.timeoutInterval = 10;
[manger.securityPolicy setAllowInvalidCertificates:YES];
// https ssl 驗(yàn)證。
[manger setSecurityPolicy:[self customSecurityPolicy]];
// 請(qǐng)求
manger.requestSerializer=[AFJSONRequestSerializer serializer];
// 響應(yīng)( 返回格式 )
manger.responseSerializer = [AFHTTPResponseSerializer serializer];
// NSString *encoded = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[manger POST:UrlString parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//如果請(qǐng)求成功的話將responseObject保存在sucess Block中
NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
if (success) {
success(result);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if(failure) {
failure(error);
}
}];
}
+(void)post:(NSString *)UrlString params:(NSDictionary *)params formData:(void (^)(id))block prodress:(void (^)(NSProgress *))progress success:(void (^)(id))success failure:(void (^)(NSError *))failure{
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
// 設(shè)置網(wǎng)絡(luò)請(qǐng)求超時(shí)時(shí)間
manager.requestSerializer.timeoutInterval = 10;
[manager.securityPolicy setAllowInvalidCertificates:YES];
// https ssl 驗(yàn)證。
[manager setSecurityPolicy:[self customSecurityPolicy]];
// 請(qǐng)求 manager.requestSerializer=[AFJSONRequestSerializer serializer];
// 響應(yīng)( 返回格式 )
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:UrlString parameters:params constructingBodyWithBlock:^(id_Nonnull formData) {
if (block) {
block(formData);
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
if (progress) {
progress(uploadProgress);
}
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//如果請(qǐng)求成功的話將responseObject保存在sucess Block中
NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
if (success){
success(result);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if(failure){
failure(error);
}
}];
}
https ssl 驗(yàn)證。
//https ssl 驗(yàn)證。
+ (AFSecurityPolicy *)customSecurityPolicy {
// 先導(dǎo)入證書 證書由服務(wù)端生成
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"wnwHTTPS" ofType:@"cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
// NSLog(@"cerData = %@",cerData);
// AFSSLPinningModeCertificate 使用證書驗(yàn)證模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允許無(wú)效證書(也就是自建的證書),默認(rèn)為NO
// 如果是需要驗(yàn)證自建證書,需要設(shè)置為YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要驗(yàn)證域名,默認(rèn)為YES;
//假如證書的域名與你請(qǐng)求的域名不一致,需把該項(xiàng)設(shè)置為NO;如設(shè)成NO的話,即服務(wù)器使用其他可信任機(jī)構(gòu)頒發(fā)的證書,也可以建立連接,這個(gè)非常危險(xiǎn),建議打開。
//置為NO,主要用于這種情況:客戶端請(qǐng)求的是子域名,而證書上的是另外一個(gè)域名。因?yàn)镾SL證書上的域名是獨(dú)立的,假如證書上注冊(cè)的域名是www.google.com,那么mail.google.com是無(wú)法驗(yàn)證通過(guò)的;當(dāng)然,有錢可以注冊(cè)通配符的域名*.google.com,但這個(gè)還是比較貴的。
//如置為NO,建議自己添加對(duì)應(yīng)域名的校驗(yàn)邏輯。
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
return securityPolicy;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。