Локальная сеть с использованием URLSession - Swift 4.2, Xcode 10.1 - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь сделать HTTP-запрос по локальной сети на IP-адрес.Тем не менее, когда я вызываю dataTask, он фактически не делает запрос.Запросы в инет работают нормально.Я также попытался сделать запрос от HTTPBot, и он был успешным.

Вот код, который делает вызов:

    let url = apiBaseUrl + "get_serial"
    let urlObj = URL(string: url)
    var urlRequest = URLRequest(url: urlObj!)

    urlRequest.httpMethod = "GET"
    urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData

    URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
            guard let data = data else { return }

            let serial = (String(data: data, encoding: .utf8))

            onSuccess(serial ?? "")
        }

URL-адрес правильно определен как http://192.168.0.50/get_serial

Я попытался пройти по нему, но после того, как он достиг URLSession.shared.dataTask больше ничего не делает.Я подозревал проблему с многопоточностью и пытался добавить задержку, а также пытался отправить dataTask из глобального потока, но ни одна из них не работала.Я также попытался разрешить произвольную загрузку в моем файле .plist и добавить этот IP в качестве домена исключения: plist

Я не уверен, что мне не хватает.

1 Ответ

0 голосов
/ 28 декабря 2018

Согласно документации Apple :

После создания задачи ее необходимо запустить, вызвав метод resume () .

Таким образом, вы должны удерживать экземпляр URLSession.shared.dataTask и запускать его с помощью метода resume.Что-то вроде следующего.

let url = apiBaseUrl + "get_serial"
let urlObj = URL(string: url)
var urlRequest = URLRequest(url: urlObj!)

urlRequest.httpMethod = "GET"
urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData

let task = URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
        guard let data = data else { return }

        let serial = (String(data: data, encoding: .utf8))

        onSuccess(serial ?? "")
    }

task.resume()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...