Apache HttpComponents詳解

一、簡介

Apache HttpComponents是一個開源的Java HTTP庫,可以用於創建和發送HTTP, HTTPS請求,以及處理HTTP響應。該庫最初由Jakarta項目提供,現已成為Apache項目的一部分。Apache HttpComponents包含兩個模塊:HttpClient和HttpCore。

二、HttpClient模塊

HttpClient模塊是使用最廣泛的HttpComponents模塊之一。HttpClient提供了許多功能,包括但不限於:

1、創建和發送HTTP, HTTPS請求。

2、支持連接池和狀態管理,以便重用HTTP連接並優化性能。

3、支持異步請求以及回調函數。

三、HttpCore模塊

HttpCore模塊是HttpClient模塊的底層模塊。HttpCore提供了HTTP協議的核心功能,包括但不限於:

1、HTTP請求和響應消息的解析和序列化。

2、支持處理HTTP頭和HTTP實體。

3、支持HTTP連接的管理和線程安全。

四、使用HttpComponents發送HTTP請求

以下代碼示例演示如何使用HttpComponents發送HTTP GET請求:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpComponentsDemo {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpget = new HttpGet("http://www.example.com/");
        CloseableHttpResponse response = httpclient.execute(httpget);
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                System.out.println(EntityUtils.toString(entity));
            }
        } finally {
            response.close();
        }
    }
}

上述代碼中創建了一個默認的CloseableHttpClient對象。使用HttpGet對象來表示HTTP GET請求,並使用execute方法發送HTTP請求。最後,從HTTP響應中獲取實體,並將其轉換為字符串以打印響應內容。

五、處理HTTP響應

以下代碼示例演示如何處理HTTP響應:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpResponse;

public class HttpComponentsDemo {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpGet httpget = new HttpGet("http://www.example.com/");

        HttpResponse response = httpclient.execute(httpget);
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("statusCode=" + statusCode);

        HttpEntity entity = response.getEntity();
        if (entity != null) {
            String content = EntityUtils.toString(entity);
            System.out.println("content=" + content);
        }
    }
}

上述代碼中,從HttpResponse對象中獲取響應狀態碼,並從HttpEntity對象中獲取響應實體內容。

六、使用連接池和線程安全

以下代碼示例演示如何使用連接池和線程安全的CloseableHttpClient:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class HttpComponentsDemo {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();

        HttpGet httpget = new HttpGet("http://www.example.com/");

        CloseableHttpResponse response = httpClient.execute(httpget);
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                System.out.println(EntityUtils.toString(entity));
            }
        } finally {
            response.close();
        }

        httpClient.close();
    }
}

HttpClientBuilder.create().build()會創建一個線程安全、支持連接池的CloseableHttpClient實例。使用該實例發送HTTP請求,由於該實例支持連接池,所以可以重用HTTP連接以及提高性能。最後,關閉HttpClient實例釋放資源。

七、使用IO處理和上傳文件

以下代碼示例演示如何使用HttpComponents上傳文件:

import java.io.File;
import java.io.FileInputStream;

import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpComponentsDemo {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpclient = HttpClients.createDefault();

        HttpPost httppost = new HttpPost("http://www.example.com/upload");

        File file = new File("test.txt");
        FileInputStream fis = new FileInputStream(file);

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("file", fis, ContentType.APPLICATION_OCTET_STREAM, file.getName());

        httppost.setEntity(builder.build());

        CloseableHttpResponse response = httpclient.execute(httppost);
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                System.out.println(EntityUtils.toString(entity));
            }
        } finally {
            response.close();
        }

        httpclient.close();
    }
}

上述代碼中,使用HttpPost對象來表示HTTP POST請求,並將要上傳的文件包裝到MultipartEntityBuilder對象中。最後,使用CloseableHttpClient發送HTTP請求,並將HTTP響應實體轉換為字符串以打印響應內容。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245316.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:08
下一篇 2024-12-12 13:08

相關推薦

  • Apache配置Python環境

    Apache是一款流行的Web服務器軟件,事實上,很多時候我們需要在Web服務器上使用Python程序做為數據處理和前端網頁開發語言,這時候,我們就需要在Apache中配置Pyth…

    編程 2025-04-28
  • Apache偽靜態配置Java

    本文將會從多個角度闡述如何在Apache中正確偽裝Java應用程序,實現URL的靜態化,提高網站的SEO優化和性能。以下是相關的配置和代碼實例。 一、RewriteEngine的配…

    編程 2025-04-27
  • 如何解決org.apache.tomcat.util.net.nioendpoint套接字處理器出錯?

    org.apache.tomcat.util.net.nioendpoint套接字處理器一般是指Tomcat服務器的套接字處理器,在Tomcat服務器中佔據着非常重要的位置。如果出…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論