Код:
#pragma mark - Post data
-(void)postData:(NSData *)data withUrl:(NSString*)urlStr completion:(void (^)(NSError *error, NSData *data))callback
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:OC_SEND_TIMEOUT_INTERVAL];
request.HTTPMethod = @"POST";
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[@([data length]) stringValue] forHTTPHeaderField:@"Content-Length"];
[request setValue:self.userAgent forHTTPHeaderField: @"User-Agent"];
request.HTTPBody = data;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSDictionary *proxyDict = @{
@"HTTPEnable" : [NSNumber numberWithInt:1],
(NSString *)kCFStreamPropertyProxyLocalBypass : @"*.*.*.*",
@"HTTPSEnable" : [NSNumber numberWithInt:1],
(NSString *)kCFStreamPropertyProxyLocalBypass : @"*.*.*.*"
};
configuration.connectionProxyDictionary = proxyDict;
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *rdata, NSURLResponse *response, NSError *error){
callback(error, rdata);
[session finishTasksAndInvalidate];
}];
[task resume];
}
-(void) URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler{
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
__block NSURLCredential *credential = nil;
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
BOOL ret = [self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host];
if (ret) {
credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
if (credential) {
disposition = NSURLSessionAuthChallengeUseCredential;
} else {
disposition = NSURLSessionAuthChallengePerformDefaultHandling;
}
} else {
LOG_ERROR(USTAG, @"evaluate server trust failed!");
disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
}
} else {
disposition = NSURLSessionAuthChallengePerformDefaultHandling;
}
if (completionHandler) {
completionHandler(disposition, credential);
}
}
<!-- end snippet -->
Сообщение об ошибке:
nw_socket_handle_socket_event [C193.1.1:3] Socket received READ_CLOSE event
nw_protocol_boringssl_input_finished(1543) <private>[0x7f89a7752f80] Peer disconnected during the middle of a handshake. Sending errSSLClosedNoNotify(-9816) alert
nw_endpoint_flow_protocol_disconnected [C193.1.1 IPv4#abcfcea2:443 in_progress socket-flow (satisfied)] Output protocol disconnected
nw_connection_report_state_with_handler_locked [C193] reporting state failed error server closed session with no notification
TIC TCP Conn Event [193:0x600003cdf600]: 3
TIC TCP Conn Failed [193:0x600003cdf600]: 3:-9816 Err(-9816)
TIC TCP Conn Cancel [193:0x600003cdf600]
[C193 Hostname#d46b037c:443 tcp, url hash: 846aa964, tls] cancel
[C193 Hostname#d46b037c:443 tcp, url hash: 846aa964, tls] cancelled
0.000s [C193 <private> Hostname#d46b037c:443 proxy] path:start
0.000s [C193 <private> Hostname#d46b037c:443 proxy] path:satisfied
0.000s [C193 <private> Hostname#d46b037c:443 proxy] proxy:start_process
0.000s [C193 <private> Hostname#d46b037c:443 proxy] proxy:finish_process
0.000s [C193 <private> Hostname#d46b037c:443 proxy] proxy:start_resolve
0.000s [C193 <private> Hostname#d46b037c:443 proxy] proxy:finish_resolve
0.000s [C193.1 <private> Hostname#d46b037c:443 resolver] path:start
0.000s [C193.1 <private> Hostname#d46b037c:443 resolver] path:satisfied
0.000s [C193.1 <private> Hostname#d46b037c:443 resolver] resolver:start_dns
0.003s [C193.1 <private> Hostname#d46b037c:443 resolver] resolver:receive_dns
0.003s [C193.1.1 <private> 172.16.1.165:49583<->IPv4#abcfcea2:443 socket-flow] path:start
0.003s [C193.1.1 <private> 172.16.1.165:49583<->IPv4#abcfcea2:443 socket-flow] path:satisfied
0.004s [C193.1.1 <private> 172.16.1.165:49583<->IPv4#abcfcea2:443 socket-flow]
0.005s [C193.1.1 <private> 172.16.1.165:49583<->IPv4#abcfcea2:443 socket-flow] flow:finish_transport
0.005s [C193.1 <private> Hostname#d46b037c:443 resolver] flow:finish_transport
0.005s [C193 <private> Hostname#d46b037c:443 proxy] flow:finish_transport
60.007s [C193.1.1 <private> 172.16.1.165:49583<->IPv4#abcfcea2:443 socket-flow] flow:failed_connect server closed session with no notification
60.007s [C193.1 <private> Hostname#d46b037c:443 resolver] flow:failed_connect
60.007s [C193 <private> Hostname#d46b037c:443 proxy] flow:failed_connect
60.008s [C193] path:cancel
nw_connection_report_state_with_handler_locked [C193] reporting state cancelled error server closed session with no notification
TIC TCP Conn Destroyed [193:0x600003cdf600]
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9816)
Task <20D1A31A-D9A1-46C6-A2DB-905114871629>.<1> HTTP load failed (error code: -1200 [3:-9816])
Task <20D1A31A-D9A1-46C6-A2DB-905114871629>.<1> finished with error - code: -1200
info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>domain-1</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>domain-2</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>domain-3</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
</dict>
</dict>