一、簡介
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
微信掃一掃
支付寶掃一掃