我在Xcode 7.1 / Objective C的模拟器上运行了简单的测试应用程序。请参阅下面的代码。无论我做什么或使用什么网址,响应都是nil
,数据是nil
。我究竟做错了什么?我现在可以从我的Mac访问这些URL。提前致谢
NSString *urlAsStringTEST = @"http://www.yahoo.com";
NSURL *urlTEST = [NSURL URLWithString:urlAsStringTEST];
NSURLRequest *urlRequestTEST = [NSURLRequest requestWithURL:urlTEST];
NSURLResponse *responseTEST = nil;
NSError *errorTEST = nil;
NSLog(@"Firing synchronous url connection...");
NSData *dataTEST = [NSURLConnection sendSynchronousRequest:urlRequestTEST
returningResponse:&responseTEST
error:&errorTEST];
if ([dataTEST length] > 0 && errorTEST == nil) {
}
答案 0 :(得分:2)
iOS 9和OS X 10.11增加了一项名为App Transport Security的技术,可能会给您带来一些问题。默认情况下,它会阻止应用尝试使用过时安全机制的所有非HTTPS请求或HTTPS请求。
为了发出其他类型的请求(HTTP或HTTPS,没有最新的安全机制),您必须在Info.plist中设置App Transport Security的例外。您可以在the documentation中详细了解如何执行此操作。
您可以通过向Info.plist添加以下内容来为特定域设置特定的例外。您启用哪个例外取决于域的问题,并且会有所不同(请参阅上面链接的各种选项文档):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>youtube.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
允许所有请求的不太理想的霰弹枪方法(可能对调试或需要加载任意内容的应用程序有用)如下(您可以将其添加到Info.plist中):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>