使用 URLSession 的本地网络 - Swift 4.2,Xcode 10.1
Local networking using URLSession - Swift 4.2, Xcode 10.1
我正在尝试通过本地网络向 IP 地址发出 HTTP 请求。但是,当我调用 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 添加为异常域:
我不确定我错过了什么。
After you create the task, you must start it by calling its resume() method.
因此您必须保留 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()
我正在尝试通过本地网络向 IP 地址发出 HTTP 请求。但是,当我调用 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 添加为异常域:
我不确定我错过了什么。
After you create the task, you must start it by calling its resume() method.
因此您必须保留 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()