// // OpenApiNetworking.m // LCOpenSDKDemo // // Created by bzy on 17/3/21. // Copyright © 2017年 lechange. All rights reserved. // #import "OpenApiNetworking.h" typedef NSString* (^CallBack)(void); @interface OpenApiNetworking () < NSURLConnectionDataDelegate, NSURLConnectionDelegate > @property (nonatomic, strong) dispatch_semaphore_t sema; @property (nonatomic, copy) NSString *resp; @end @implementation OpenApiNetworking static OpenApiNetworking* _instance = nil; + (instancetype)shareMyInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[super allocWithZone:NULL] init]; }); return _instance; } + (id)allocWithZone:(struct _NSZone *)zone { return [OpenApiNetworking shareMyInstance]; } - (id)copy { return [OpenApiNetworking shareMyInstance]; } - (id)mutableCopy { return [OpenApiNetworking shareMyInstance]; } - (NSString *)requestByPost:(NSString*)url params:(NSString*)params { _resp = nil; NSLog(@"%@", params); NSURL *nsURL =[NSURL URLWithString:url]; /** Ch:创建请求对象 En:Create request object */ NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:nsURL]; /** Ch:创建请求方式 En:Create request method */ [request setHTTPMethod:@"post"]; /** Ch:设置请求参数 En:Set request parameters */ NSData *tempData = [params dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:tempData]; [request setTimeoutInterval:10.0]; /** Ch:创建连接对象 En:Create connection object */ NSURLConnection *Connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; /** Ch:设置回调队列 En:Set up callback queue */ [Connection setDelegateQueue:[NSOperationQueue mainQueue]]; /** Ch:开始请求(异步转化为同步) En:Start request (asynchronous to synchronous) */ _sema = dispatch_semaphore_create(0); [Connection start]; dispatch_semaphore_wait(_sema, DISPATCH_TIME_FOREVER); return _resp; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { if (_resp) { _resp = [NSString stringWithFormat:@"%@%@", _resp, [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]]; } else { _resp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } NSLog(@"%@", _resp); } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"%@", error); dispatch_semaphore_signal(_sema); } /** Ch:服务器的数据接收完毕 En:Server data received */ - (void)connectionDidFinishLoading:(NSURLConnection *)connection { dispatch_semaphore_signal(_sema); } /** Ch:取消证书验证 En:Cancel certificate verification */ - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { [[challenge sender] useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge]; } } - (void)cancelRequest { dispatch_semaphore_signal(_sema); } @end