首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 網絡編程實戰:URL 處理與網頁內容抓取

     編輯:Java 程式設計入門

URL 類核心用法

java.net.URL 封裝統一資源定位符,支援協議、主機、端口、路徑、查詢、片段等組件解析與構造。

示例一:IP 反查主機名

import java.net.*;

public class GetHost {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Usage: java GetHost  ...");
            return;
        }
        for (String arg : args) {
            try {
                InetAddress[] addrs = InetAddress.getAllByName(arg);
                for (InetAddress addr : addrs) {
                    System.out.println(addr.getHostName() + " -> " + addr.getHostAddress());
                }
            } catch (UnknownHostException e) {
                System.err.println("無法解析:" + arg);
            }
        }
    }
}

編譯運行:javac GetHost.java && java GetHost 114.114.114.114 www.baidu.com

示例二:抓取網頁源碼(簡易版 curl)

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

public class GetHTML {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.err.println("Usage: java GetHTTP ");
            System.exit(1);
        }
        try {
            URL url = new URL(args[0]);
            try (BufferedReader in = new BufferedReader(
                    new InputStreamReader(url.openStream(), "UTF-8"))) {
                String line;
                while ((line = in.readLine()) != null) {
                    System.out.println(line);
                }
            }
        } catch (MalformedURLException e) {
            System.err.println("URL 格式錯誤:" + e.getMessage());
        } catch (IOException e) {
            System.err.println("網絡讀取失敗:" + e.getMessage());
        }
    }
}

URL 組件解析與構造

方法說明示例輸出
getProtocol()協議http
getHost()主機名www.example.com
getPort()端口(-1 表示默認)8080
getFile()路徑+查詢串/path?k=v
getRef()片段標識符section1

構造方式:

  • new URL("https://host:8080/path") 絕對 URL
  • new URL(baseURL, "relative/path") 相對 URL
  • new URL("http", "host", 8080, "/path") 組件拼裝

進階:HttpURLConnection 完整控制

URL url = new URL("https://api.example.com/data");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
conn.setConnectTimeout(5000);
conn.setReadTimeout(10000);

try (OutputStream os = conn.getOutputStream()) {
    os.write("{\"key\":\"value\"}".getBytes("UTF-8"));
}

int code = conn.getResponseCode();
try (BufferedReader br = new BufferedReader(
        new InputStreamReader(code < 400 ? conn.getInputStream() : conn.getErrorStream()))) {
    // 處理響應
}

最佳實踐提醒

  • 生產環境請使用成熟 HTTP 客戶端:Apache HttpClient 5.x、OkHttp、Spring WebClient,支援連接池、重試、攔截器、異步非阻塞。
  • HTTPS 需處理憑證信任,開發期可暫時信任所有(TrustManager),生產必須驗證。
  • 大文件下載使用 RandomAccessFile + Range 請求頭實現斷點續傳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved