1

我的应用程序中的 webviews 从新的 iOS 9 NSAppTransportSecurity 标准中得到了这些错误:

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

我不知道这个错误是在哪里产生的,但基本上我想知道如何知道尝试了哪个 URL?

之后,我可以适当地配置 plist。

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

4

1 回答 1

2

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

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

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

如果您需要在运输应用程序中以允许您远程调试它的方式执行此操作,请全局注册一个NSURLProtocol对象,并在canInitWithRequest:方法中打印该值并返回 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]];

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

于 2015-10-28T05:32:46.547 回答