Swift:
การดาวน์โหลดหน้าเว็บ
วิธีการ:
ลองใช้ URLSession
เพื่อทำงานนี้ Swift ทำให้มันตรงไปตรงมา
import Foundation
let url = URL(string: "https://www.example.com")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print("Error:", error)
return
}
if let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) {
if let mimeType = httpResponse.mimeType, mimeType == "text/html",
let data = data, let string = String(data: data, encoding: .utf8) {
print("เนื้อหาเว็บเพจที่ดาวน์โหลดมา:")
print(string)
} else {
print("ประเภท MIME หรือการเข้ารหัสไม่ถูกต้อง.")
}
} else {
print("เซิร์ฟเวอร์ตอบกลับด้วยข้อผิดพลาด.")
}
}
task.resume()
// ตรวจสอบให้แน่ใจว่า playground ทำงานต่อเนื่องจนกว่างานจะเสร็จสิ้น
RunLoop.current.run()
ผลลัพธ์ตัวอย่างอาจดูเช่นนี้:
เนื้อหาเว็บเพจที่ดาวน์โหลดมา:
<!doctype html>...
ลงลึก
API URLSession
ได้รับการเปิดตัวตั้งแต่ iOS 7 และ macOS 10.9 มันเป็นการเปลี่ยนแปลงที่สำคัญในขณะนั้น, ได้แทนที่ NSURLConnection
ที่เก่ากว่าและยุ่งยากกว่า ในขณะที่ URLSession
ทรงพลังและยืดหยุ่น, คุณอาจพิจารณาไลบรารีของบุคคลที่สามเช่น Alamofire สำหรับความต้องการเครือข่ายที่ซับซ้อนมากขึ้น
เมื่อดำเนินการ, จำไว้ว่าคำขอเครือข่ายเป็นแบบไม่ต้องรอการตอบสนอง ซึ่งหมายความว่าแอปของคุณสามารถดำเนินการอื่น ๆ ได้ในขณะที่เซิร์ฟเวอร์ตอบกลับมาหาคุณ นอกจากนี้, การใช้ URLSession
อย่างเหมาะสมประกอบด้วยการจัดการข้อผิดพลาดอย่างมีเมตตาและตรวจสอบสถานะตอบกลับจากเซิร์ฟเวอร์ การตรวจสอบประเภท MIME เป็นสิ่งสำคัญเพื่อให้แน่ใจว่าคุณได้รับ HTML, ไม่ใช่ประเภทไฟล์อื่นๆ เช่น JSON หรือภาพ
ดูเพิ่มเติม
ลงลึกเพิ่มเติมหรือสำรวจทางเลือก:
- เอกสาร
URLSession
ของ Apple: URLSession - Swift networking กับ Alamofire: Alamofire
- แพทเทิร์น async/await ของ Swift สำหรับ
URLSession
ใน iOS 15+: URLSession async/await