网络请求失败 - NSURLSession - App Sandbox - Xcode 9

时间:2017-10-27 09:29:57

标签: objective-c json nsurlsession nsmutableurlrequest nsurlsessiondatatask

我有一个简单的GET请求,我试图在我的macOS应用程序中运行。但是我一直收到以下错误:

  

找不到具有指定主机名的服务器。

我尝试从以下位置下载JSON数据的URL是:

  

https://suggestqueries.google.com/complete/search?client=safari&q=mercedes

如果我在浏览器或在线API测试人员网站(例如Hurl.it)中测试它,请求正常。然后会自动下载JSON文件。

但是,通过我的macOS应用程序运行请求不起作用。这是我的代码:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://suggestqueries.google.com/complete/search?client=safari&q=mercedes"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"GET"];

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    NSLog(@"Data: %@", data);
    NSLog(@"Response: %@", response);
    NSLog(@"Error: %@", error);

}] resume];

以下是完整的错误日志:

  

dnssd_clientstub ConnectToServer:connect() - >没有尝试:1   dnssd_clientstub ConnectToServer:connect() - >没有尝试:2   dnssd_clientstub ConnectToServer:connect() - >没有尝试:3   dnssd_clientstub ConnectToServer:connect()失败

     

路径:/ var / run / mDNSResponder套接字:6 Err:-1 Errno:1操作不   允许2017-10-27 09:58:31.610493 + 0100搜索建议   [] nw_resolver_create_dns_service_locked   DNSServiceCreateDelegateConnection失败:ServiceNotRunning(-65563)   TIC TCP Conn失败[1:0x600000164080]:10:-72000 Err(-65563)   任务< 12212C3B-8606-49C2-BD72-AEBD575DB638>。< 1>。 HTTP加载失败   (错误代码:-1003 [10:-72000])   任务   < 12212C3B-8606-49C2-BD72-AEBD575DB638>。&LT 1为卤素;完成错误 - 代码:   -1003

     

数据:( null)   回复:( null)   错误:错误域= NSURLErrorDomain代码= -1003"具有指定的服务器   无法找到主机名。" UserInfo = {NSUnderlyingError = 0x60400004fa20 {错误   Domain = kCFErrorDomainCFNetwork Code = -1003"(null)"   的UserInfo = {_ kCFStreamErrorCodeKey = -72000,   _kCFStreamErrorDomainKey = 10}},NSErrorFailingURLStringKey = https://www.suggestqueries.google.com/complete/search?client=safari&q=mercedes,   NSErrorFailingURLKey = https://www.suggestqueries.google.com/complete/search?client=safari&q=mercedes,   _kCFStreamErrorDomainKey = 10,_kCFStreamErrorCodeKey = -72000,NSLocalizedDescription =具有指定主机名的服务器无法   找到。}

我做错了什么?这只是一个简单的GET请求,我不明白为什么数据不会加载。

谢谢你的时间,Dan。

4 个答案:

答案 0 :(得分:12)

我弄清楚出了什么问题,即使我已将Allow Arbitrary Loads设置为YES,但这还不足以启用网络请求。

Allow Arbitrary Loads

Xcode 9中有一个名为App Sandbox的新设置,可以阻止传入/传出网络连接!我必须关闭此设置,然后所有网络请求都开始工作。

App Sandbox Setting

答案 1 :(得分:2)

在XCode 11.5中,我必须检查这两个标志

enter image description here

答案 2 :(得分:1)

enter image description here

您必须关闭“应用程序沙箱”。

转到:

xcode Project-> Capabilities -> App SandBox

答案 3 :(得分:0)

请尝试以下代码

@property (nonatomic, strong) NSURLConnection *connection;

NSMutableString *urlString = [NSMutableString stringWithString:BASE_URL];

[urlString appendFormat:@"%@",apiName]; //apiName —> Webservice Name

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];

[request setValue:@"gF!DeEfFrjqaAaD$gH#Mn@w(z" forHTTPHeaderField:@"PC-API-KEY"];  //Optional Parameter pass if required key
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[request setHTTPMethod:@"POST"]; //if your required Get than  [request setHTTPMethod:@"GET"];

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[parameterDict toJSON]];
[request setTimeoutInterval:45.0];

self.connection =[[NSURLConnection alloc] initWithRequest:request delegate:self];

if (self.connection) {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    self.downLoadedData = [NSMutableData data];
}