NSURLRequest不会返回回复

时间:2015-11-18 18:20:45

标签: objective-c

我在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) {
}

1 个答案:

答案 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>