Kotlin:
การดาวน์โหลดหน้าเว็บ
วิธีการ:
มาเริ่มใช้ HttpURLConnection
ของ Kotlin ในการดึงเว็บเพจอย่างรวดเร็วกันเถอะ เราจะใช้ coroutines ในการทำงานเบื้องหลังอย่างราบรื่น นี่คือคู่มือ:
import java.net.HttpURLConnection
import java.net.URL
import kotlinx.coroutines.*
fun main() = runBlocking {
val url = "http://example.com"
val result = withContext(Dispatchers.IO) {
downloadWebPage(url)
}
println(result)
}
fun downloadWebPage(urlAddress: String): String {
val url = URL(urlAddress)
val connection = url.openConnection() as HttpURLConnection
try {
connection.connect()
return connection.inputStream.bufferedReader().use { it.readText() }
} finally {
connection.disconnect()
}
}
ตัวอย่างผลลัพธ์:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</html>
ดีไหม? คุณได้ HTML ของเว็บเพจแล้วนะ!
การทำความเข้าใจลึกซึ้ง
การดาวน์โหลดเว็บเพจเป็นเรื่องที่เกิดขึ้นมานานแล้วตั้งแต่ยุคของเว็บเอง ในยุค 90, คนๆ ใช้เครื่องมือบรรทัดคำสั่งอย่าง wget
และ curl
พวกมันยังคงมีอยู่แต่เมื่อคุณต้องการควบคุมมากขึ้นหรือต้องการผสมผสานการดึงเนื้อหาเว็บเข้ากับแอพ, คุณจะต้องเขียนโค้ดมัน
ใน Kotlin, คุณสามารถใช้ HttpURLConnection
ของ Java หรือไลบรารีอย่าง OkHttp หรือ Ktor สำหรับวิธีที่มีประสิทธิภาพมากขึ้นด้วยคุณสมบัติเพิ่มเติม ตัวอย่างข้างต้นเป็นเพียงพื้นฐาน; ในชีวิตจริง, คุณต้องพิจารณาเรื่องการจัดการข้อผิดพลาด, เรื่องการเปลี่ยนทิศทาง, และประสิทธิภาพ อาจจะเพิ่มการลองใหม่หรือเวลาหมดอายุ? และคุณไม่สามารถลืมเกี่ยวกับการจัดการรหัสตัวละครและประเภทเนื้อหาที่แตกต่างกันได้
คุณก็ต้องคิดถึงการทำงานของเธรด ไม่ต้องการให้เธรดหลักหยุดทำงานในขณะที่กำลังดึงหน้าเว็บขนาดใหญ่ใช่ไหม? นั่นคือเหตุผลของ coroutines - ช่วยให้แอพของคุณยังคงตอบสนองได้, ดึงข้อมูลในเบื้องหลังโดยไม่ต้องทำงานหนัก
ดูอีกด้วย
- OkHttp: https://square.github.io/okhttp/
- Ktor Client: https://ktor.io/docs/client.html
- Kotlin Coroutines: https://kotlinlang.org/docs/coroutines-overview.html
- Java HttpURLConnection: https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html
นั่นคือความสำคัญ—ได้หน้าเว็บมา, ปฏิบัติอย่างฉลาดเกี่ยวกับมัน, และเคารพต่อข้อมูลและแหล่งที่มาเสมอ สนุกกับการเขียนโค้ดนะ!