Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีอ่านเนื้อหาเว็บเพจโดยไม่ใช้ไลบรารีภายนอกใน Java

คลาส URL ในแพ็กเกจ java.net ใช้สำชี้ resource ในเว็บ เมธอด openStream() เปิดการเชื่อมต่อและคืนค่า InputStream สำหรับอ่านข้อมูล

ขั้นตอน

  1. สร้างออบเจ็กต์ URL ด้วย URL ของเว็บเพจ
  2. เรียก openStream() ได้ InputStream
  3. wrap ด้วย Scanner หรือ BufferedReader เพื่ออ่านง่ายขึ้น

ตัวอย่างโค้ด

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;

public class ReadingWebPage {
    public static void main(String[] args) throws IOException {
        URL url = new URL("https://www.example.com/");
        Scanner sc = new Scanner(url.openStream());
        
        StringBuffer sb = new StringBuffer();
        while (sc.hasNext()) {
            sb.append(sc.next());
        }
        
        String result = sb.toString();
        System.out.println("Raw HTML: " + result);
        
        // ลบ HTML tags
        result = result.replaceAll("<[^>]*>", "");
        System.out.println("Text only: " + result);
    }
}

ผลลัพธ์

Raw HTML: 

It works!

Text only: It works!

วิธีที่ดีกว่า: ใช้ BufferedReader


import java.io.*;
import java.net.URL;

public class ReadingWebPageBetter {
    public static void main(String[] args) throws IOException {
        URL url = new URL("https://www.example.com/");
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(url.openStream(), "UTF-8"))) {
            
            String line;
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
            System.out.println(sb.toString());
        }
    }
}

ข้อจำกัดของ URL.openStream()

  • ไม่รองรับ HTTPS redirect อัตโนมัติในบาง Java version
  • ไม่มี timeout setting (ค้างได้ถ้า server ไม่ตอบ)
  • ไม่จัดการ cookies, headers, authentication
  • ไม่ parse HTML (ต้อง tự strip tags หรือใช้ Jsoup)

แนะนำสำหรับ Production

ใช้ไลบรารี HTTP client ที่ทันสมัย:

  • HttpClient (Java 11+) - built-in, รองรับ HTTP/2, async
  • OkHttp - ยอดนิยม เร็ว มี connection pooling
  • Apache HttpClient - ฟีเจอร์ครบครัน
  • Jsoup - ถ้าต้อง parse/extract HTML