2016-08-08 12 views
2

Я пытаюсь прочитать удаленный файл txt, который находится на удаленном хостинге. У меня есть ссылка, например http://www.link.com/file.txt.Не удается получить результат от NSURL

Я использую этот код:

let myURLString = "http://google.com" 
guard let myURL = NSURL(string: myURLString) else { 
    print("Error: \(myURLString) doesn't seem to be a valid URL") 
    return 
} 

do { 
    let myHTMLString = try String(contentsOfURL: myURL) 
    print("HTML : \(myHTMLString)") 
} catch let error as NSError { 
    print("Error: \(error)") 
} 

Но всегда получаю пустую строку. Файл не пуст. Я запускаю свое приложение на симуляторе iOS в Xcode. Что я делаю неправильно?

Извините за мой плохой английский.

+0

Какая ошибка возвращается? –

+0

Я проверил ваш код на детской площадке (например, с помощью google.com), и я получаю результат. Код прекрасно работает. Не могли бы вы поделиться ссылкой txt? Вы можете получить ссылку в своем терминале (например, с помощью wget). –

+0

Вы можете использовать отладчик прокси (например, Charles Proxy и т. Д.), Чтобы проверить, отправляется ваш HTTP-запрос, и ответ содержит ожидаемый контент. –

ответ

1

Не используйте stringWithContentsOfURL и друзей для извлечения данных с удаленного сервера. Это синхронный API, который был разработан исключительно для использования с локальными файлами. Даже не гарантируется правильность работы сетевых запросов в фоновом потоке, а тем более в основном потоке.

Правильный способ получения данных с удаленных URL-адресов связан с NSURLSession. Я не программист Swift, поэтому я не буду пытаться использовать Swift, но эквивалент Objective-C:

NSURL *url = ... 
NSURLSessionDataTask *task = 
    [NSURLSession sharedSession dataTaskWithURL:url 
           completionHandler:^(NSData *data, 
                NSURLResponse *response, 
                NSError *error) { 
     if (error) { 
      // Handle client-side errors here 
     } else if (((NSHTTPURLResponse *)response).statusCode != 200) { 
      // Handle server-side errors here 
     } else { 
      NSString *stock = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
      // Do something with data here. 
     } 
    }]; 
[task resume]; 
0

Не проверяйте код, но это должно привести вас в правильном направлении.

var statsRequest: String = "http://www.link.com/file.txt" 
var statsRequestURL: NSURL = NSURL(string: statsRequest)! 
var error: NSError? = nil 
var stockNews: String = try! String.stringWithContentsOfURL(statsRequestURL, encoding: NSUTF8StringEncoding) 

Если текстовый файл имеет другую кодировку, вы можете просто использовать NSASCIIStringEncoding, а затем разобрать файл HTML.