我正在尝试通过本地网络向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添加为异常域:
我不知道我错过了什么。
最佳答案
根据Apple documentation:
创建任务后,必须通过调用其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()
关于ios - 使用URLSession的本地网络-Swift 4.2,Xcode 10.1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53952506/