【发布时间】:2014-07-23 00:30:12
【问题描述】:
我有一台安装了自签名 SSL 证书的服务器。但是,一旦我调用以下方法,它就不会得到任何响应。一旦我将 URL 改回 http,它就可以工作了。
- (void)getAccountInfoWithCompletion:(void (^)(NSDictionary *json_response, NSError *error))completion
{
NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:
[NSString stringWithFormat:@"%@/api/account/%d/get_info", BASE_HOST_URL_IP, [self getUserID]]
]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (error)
{
if (completion)
{
//completion(@"error", error);
}
} else {
NSString *response_string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *json_object = [NSJSONSerialization JSONObjectWithData:[response_string dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
if (completion)
{
completion(json_object, error);
}
}
}];
}
我选择委托的原因是我可以在我的应用程序中使用自签名证书。以下教程是我正在使用的,但后来我意识到我不能将委托与 completionHandler 方法一起使用。不过我需要保留 completionHandler 方法。
http://www.cocoanetics.com/2010/12/nsurlconnection-with-self-signed-certificates/
如何才能收到来自 SSL 站点的响应?
【问题讨论】:
-
旁注 - 不要检查
error以了解是否有错误。检查data是否为nil。如果是nil,则有错误。 -
要完成这项工作,您不能使用这种方便的方法。使用“常规”
NSURLConnection并实现所有需要的委托方法。 -
@rmaddy 绝对没有办法?
-
您需要使用
NSURLSession等效/替换,这将为您提供一个委托方法来处理 SSL 验证。我最近不得不做同样的事情:) -
@troop231 那么 NSURLSession 会像 completionHandler 方法吗?你能指点我那个方向吗?
标签: ios objective-c cocoa-touch nsurlconnection