如何打印失败的NSURLConnection网址以查找NSAppTransportSecurity异常集?

时间:2015-10-21 15:23:24

标签: ios uiwebview nsurlconnection ios9 nsapptransportsecurity

我的应用中的网页浏览已从新的iOS 9 NSAppTransportSecurity标准中获取这些错误:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

我不知道这个错误的生成位置,但实际上我想了解如何知道尝试了哪个网址?

之后我可以适当配置plist。

到目前为止,我已在- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error中设置了断点,但在收到错误时未调用此代码。

1 个答案:

答案 0 :(得分:2)

如果您只是调试,请将CFNETWORK_DIAGNOSTICS环境变量设置为3,例如

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

在应用程序开始之前,在您调用可能导致加载CFNetwork框架代码的任何内容之前(即在 main 的开头)。您应该在控制台中获取URL。

如果您需要在运送应用中以允许远程调试的方式执行此操作,请在全局和 canInitWithRequest:方法中注册 NSURLProtocol 对象,打印值并返回NO。即使在启用严格的传输安全性的情况下,应该在该过程中尽早发生。

示例:

@interface MyProtocol: NSURLProtocol
@end

@implementation MyProtocol
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
    NSLog(@"Request: %@\n", request); // Log it in whatever way you need.
    return NO;
}
@end

...

// Somewhere else, e.g. in applicationDidFinishLaunching:, do this:
[NSURLProtocol registerClass:[MyProtocol class]];

无法保证订购,但失败的网址很可能会在失败之前大致打印出来。