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

自定義 HTTP 客戶端 HttpConnection 實現:支持 GET/POST、請求頭管理、響應流讀取與文件下載

     編輯:Java 相關知識

類設計概覽

HttpConnection 基於 Socket 手工實現 HTTP/1.0 協議,提供比 java.net.URLConnection 更精細的控制,尤其在 POST 表單提交、請求頭自定義、流式響應處理方面更靈活。

核心功能

  • GET/POST 切換:setUsePost(boolean)
  • 參數管理:addGet(name, value) / addPost(name, value) 自動 URL 編碼並拼接
  • 請求頭設置:setRequestProperty(name, value),連接前有效
  • 緩存控制:setUseCaches(false) 自動添加 Pragma: no-cache
  • 響應處理:
    • getInputStream() 獲取原始輸入流
    • getByteArray() 一次性讀取所有字節
    • getContentType() / getContentLength() 解析響應頭
  • 協議版本:默認 HTTP/1.0,可選 HTTP/1.1

關鍵方法解析

連接建立

public void connect() throws IOException {
    // 解析 URL、創建 Socket、發送請求行、請求頭、POST 體
    // 自動處理 Content-Length、Content-Type
}

響應頭解析

private void startInput() throws IOException {
    DataInputStream din = new DataInputStream(socket.getInputStream());
    String line = din.readLine(); // 忽略狀態行
    while ((line = din.readLine()) != null && line.length() > 0) {
        int idx = line.indexOf(": ");
        if (idx > 0) {
            resHeaderNames.add(line.substring(0, idx).toLowerCase());
            resHeaderValues.add(line.substring(idx + 2));
        }
    }
    inputStarted = true;
}

使用示例

POST 表單提交並獲取響應

URL url = new URL("http", "192.168.0.3", "/Post.PHP");
HttpConnection con = new HttpConnection(url);
con.setUsePost(true);
con.setUseCaches(false);
con.addGet("TextField", "你好");
con.addGet("Submit", "submit");
con.connect();
byte[] ret = con.getByteArray();
System.out.println(new String(ret));

下載圖片文件

URL url = new URL("http", "192.168.0.3", "/codemaker/IMAGES/BO.GIF");
HttpConnection con = new HttpConnection(url);
con.connect();
FileOutputStream fos = new FileOutputStream("d:\\bo.gif");
fos.write(con.getByteArray());
fos.close();

適用場景

  • 需精確控制請求頭/體的 HTTP 交互
  • 舊版 JDK 環境下缺乏高級 HTTP 客戶端庫
  • 教學演示 HTTP 協議細節

雖然標準庫 HttpURLConnection 或 Apache HttpClient 更健壯,但此實現展示了 HTTP 協議的核心機制,適合深入理解網絡編程原理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved