一、簡介
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