การดาวน์โหลดหน้าเว็บ

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