簡単に言うと、私の問題は、NSURLConnectionクラスとそのデリゲートメソッドを使用してhttpsurlに接続しようとしたことです。
「SSLエラーが発生し、サーバーへの安全な接続を確立できませんでした」というエラーが発生していました
だから私はこのソリューションを実装しましたが、運がありません。ソリューションで指定されたデリゲートメソッドが呼び出されることはありません。
それだけ
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
method
上記のエラーで呼び出されます
そこで、CFNetworkAPIを使用して自己署名証明書を使用してhttpsURLに接続するように移行しました
そしてここに私のコードがあります。私はここからそれを取り、アップルからCFNetworkプログラミングガイドを取りました
CFReadStreamRef readStream;
CFHTTPMessageRef request;
CFStringRef requestMessage = (CFStringRef)postparameters;
request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, CFSTR("POST"),
(CFURLRef) postURL, kCFHTTPVersion1_1);
CFHTTPMessageSetBody(request, (CFDataRef) requestMessage);
readStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, request);
CFRelease(request);
NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
kCFNull,kCFStreamSSLPeerName,
nil];
CFReadStreamSetProperty((CFReadStreamRef)readStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
CFReadStreamOpen(readStream);
/* Add to the run loop */
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(),
kCFRunLoopCommonModes);
if (!CFReadStreamOpen(readStream)) {
DLog(@"method called");
[_progressAlert dismissWithClickedButtonIndex:0 animated:YES];
CFReadStreamSetClient(readStream, 0, NULL, NULL);
CFReadStreamUnscheduleFromRunLoop(readStream,
CFRunLoopGetCurrent(),
kCFRunLoopCommonModes);
CFRelease(readStream);
}
else {
CFHTTPMessageRef myResponse =
(CFHTTPMessageRef)CFReadStreamCopyProperty(readStream,
kCFStreamPropertyHTTPResponseHeader);
//You can get the complete status line from the response message by calling the function CFHTTPMessageCopyResponseStatusLine:
CFStringRef myStatusLine = CFHTTPMessageCopyResponseStatusLine(myResponse);
DLog(@"status: %@", (NSString *)myStatusLine);
UInt32 myErrCode = CFHTTPMessageGetResponseStatusCode(myResponse);
NSLog(@"error :%lu", myErrCode);
}
コンソールに表示される出力は
2011-11-30 21:02:07.720 [3800:f803][Line 180] method called
それを機能させるために上記のコードに追加する必要があるもの。
認証に関係していると思います。
サンプルコードを手伝ってください。
更新:上記のコードと応答を更新しました。!CFReadStreamOpen(readStream)メソッドがtrueを返し、ログが出力されます。