iOS - HTTPS請(qǐng)求

將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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,419評(píng)論 4 61
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,692評(píng)論 0 13
  • Axure RP Pro 8.0是一個(gè)產(chǎn)品經(jīng)理必備的交互原型設(shè)計(jì)軟件,能夠高效率制作產(chǎn)品原型,快速繪制線框圖、流程...
    SwordDevil閱讀 8,552評(píng)論 6 7
  • web.xml文件詳解 前言:一般的web工程中都會(huì)用到web.xml,web.xml主要用來(lái)配置,可以方便的開發(fā)...
    ProZoom閱讀 2,313評(píng)論 0 4
  • 還在念高中的時(shí)候跟閨蜜談起對(duì)另一半的期待,總是帶著無(wú)限的幻想,無(wú)厘頭到現(xiàn)在回想起來(lái)還會(huì)發(fā)笑。 我希望他有高大帥氣的...
    等一場(chǎng)相遇閱讀 1,083評(píng)論 0 1

友情鏈接更多精彩內(nèi)容