//session
// YKSHttpsRequest.mapp
// YKShareSdkDemopost
//url
// Created by qingyun on 22/05/2017.orm
// Copyright © 2017 qingjoin. All rights reserved.server
//對象
#import "YKSHttpsRequest.h"字符串
@implementation YKSHttpsRequestget
+ (YKSHttpsRequest *)requestWithString:(NSString *)urlString {string
return [[YKSHttpsRequest alloc] initWithURLString:urlString];
}
- (id)initWithURLString:(NSString *)urlString {
if (self = [super init]) {
//轉碼成UTF8
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
url = [NSURL URLWithString:urlString] ;
NSLog(@"httpurl:%@",url);
request = [NSURLRequest requestWithURL:url];
}
return self;
}
-(void)start
{
//2.建立請求對象
//3.建立session
if(!request)
{
NSLog(@"requestNULL");
}
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"NSURLSessionDataTaskerror:%@",error);
} else {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"NSURLSessionDataTaskdic:%@",dic);
}
//5.解析數據
NSLog(@"NSURLSessionDataTask:%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}];
//4.執行task
[dataTask resume];
http://www.jianshu.com/p/8ff7269f2eff
}
//post請求
+ (void)postWithUrlString:(NSString *)url parameters:(id)parameters
{
NSURL *nsurl = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl];
//設置請求方式
request.HTTPMethod = @"POST";
NSString *postStr = [YKSHttpsRequest parseParams:parameters];
//設置請求體
request.HTTPBody = [postStr dataUsingEncoding:NSUTF8StringEncoding];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:queue];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
// failureBlock(error);
} else {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//successBlock(dic);
NSLog(@"NSURLSessionDataTaskdic:%@",dic);
}
}];
[dataTask resume];
}
//把NSDictionary解析成post格式的NSString字符串
+ (NSString *)parseParams:(NSDictionary *)params
{
NSString *keyValueFormat;
NSMutableString *result = [NSMutableString new];
NSMutableArray *array = [NSMutableArray new];
//實例化一個key枚舉器用來存放dictionary的key
NSEnumerator *keyEnum = [params keyEnumerator];
id key;
while (key = [keyEnum nextObject]) {
keyValueFormat = [NSString stringWithFormat:@"%@=%@&", key, [params valueForKey:key]];
[result appendString:keyValueFormat];
[array addObject:keyValueFormat];
}
return result;
}
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler
{
NSLog(@"URLSession :%@",challenge.protectionSpace);
if (![challenge.protectionSpace.authenticationMethod isEqualToString:@"NSURLAuthenticationMethodServerTrust"])
return;
// 若是是請求證書信任,咱們再來處理,其餘的不須要處理
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
NSURLCredential *cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
// 調用block
completionHandler(NSURLSessionAuthChallengeUseCredential,cre);
//SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
//completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:serverTrust]);
} else
{
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
}
/*
NSURLSessionAuthChallengeUseCredential 使用證書
NSURLSessionAuthChallengePerformDefaultHandling 忽略證書 默認的作法
NSURLSessionAuthChallengeCancelAuthenticationChallenge 取消請求,忽略證書
NSURLSessionAuthChallengeRejectProtectionSpace 拒絕,忽略證書
*/
NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
NSLog(@"URLSessionXXXX%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}
@end