URLSession下载
NSURLSession* session = [NSURLSession shareSession];
NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, response, error) {
NSLog(@"下载完毕");
} ;
[task resume];
let session = URLSession.shared
let defaultConfig = URLSessionConfiguration.default
let session1 = URLSession(configuration: config)
if let url = URL(string: "https://jsonplaceholder.typicode.com/photos/?albumId=1") {
let task = session.dataTask(with: url) { (Data?, URLResponse?, Error?) -> Void in
}
task.resume()
}
if let url = URL(string: "https://jsonplaceholder.typicode.com/photos/?albumId=1") {
var request = URLRequest(url: url)
request.httpBody = Data()
request.httpMethod = "POST"
let task = session.dataTask(with: request) { (Data?, URLRequest?, Error?) -> Void in
}
task.resume()
}
Full Example
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
guard let url = URL(string: "https://jsonplaceholder.typicode.com/photos/?albumId=1")
else {
fatalError("Error: cannot create URL")
}
var request = URLRequest(url: url)
request.httpMethod = "GET"
let session = URLSession.shared
let task = session.dataTask(with: request) {
(data, response, error) -> Void in
print("\ndataTask: ")
print(data ?? "No Data")
print(error ?? "No error")
}
task.resume()
How to use, Adv
let session0 = URLSession.shared
let config = URLSessionConfiguration.default
let session1 = URLSession(configuration: config)
let config2 = URLSessionConfiguration.ephemeral
let session2 = URLSession(configuration: config2)
let config3 = URLSessionConfiguration.background(withIdentifier: "myId")
let session3 = URLSession(configuration: config3)
let operationQueue = OperationQueue()
operationQueue.maxConcurrentOperationCount = 1
operationQueue.name = "session4queue"
let session4 = URLSession(configuration: config, delegate: nil, delegateQueue: operationQueue)
let request1 = URLRequest(url: url)
var request2 = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 60)
request2.httpBody = Data()
request2.httpMethod = "POST"
request2.allowsCellularAccess = true
request2.setValue("value?", forHTTPHeaderField: "key")
request2.addValue("value", forHTTPHeaderField: "key")
let res = request2.value(forHTTPHeaderField: "key")
let header = request2.allHTTPHeaderFields
let downloadTask1 = session0.downloadTask(with: url, completionHandler: {
(location, response, error) -> Void in
print("downloaded location: \(error?.localizedDescription)")
}
)
downloadTask1.resume()
let downloadTask2 = session0.downloadTask(with: request,
completionHandler: {
(location, response, error) -> Void in
print("downloaded location: \(error?.localizedDescription)")
}
)
downloadTask2.resume()
downloadTask1.cancel()
var resumeData: Data?
downloadTask2.cancel(byProducingResumeData: {
(data) -> Void in
print(data ?? "No resume data")
resumeData = data
})
if let validResumeData = resumeData {
let resumeTask2 = session0.downloadTask(
withResumeData: validResumeData,
completionHandler: {
(data, response, error) -> Void in
}
)
resumeTask2.resume()
}
let uploadTask1 = session0.uploadTask(with: request, from: Data(), completionHandler: {
(data, response, error) -> Void in
}
)
uploadTask1.resume()
if let filePath = Bundle.main.url(forResource: "subway-lister", withExtension: "json") {
print("upload filePath: \(filePath)")
let uploadTask2 = session0.uploadTask(with: request, fromFile: filePath, completionHandler: {
(data, repsonse, error) -> Void in
}
)
}