一、Httpclient簡介
Httpclient是Apache軟件基金會的一個開源項目,它是Apache HttpComponents的一部分。它是一個支持Http協議的客戶端庫,可以模擬瀏覽器的功能,實現Http請求和響應數據的傳輸。它是一個很好的Java開源庫,適用於任何需要發送Http請求的場景,可以使用多種協議,比如HTTP、HTTPS、FTP等等。
Httpclient有很多優點,比如可以通過自定義的方式控制請求的流程和參數,接收服務器返回的內容,驗證服務器的響應等。同時,它也提供了很多可用的連接配置,例如超時時間、最大連接數等設置。延伸下去,它還可以幫助我們實現下載文件、發送郵件等操作,可以節省很多時間和精力。
二、Httpclient的使用方法
Httpclient的使用非常簡單,一般來說分為兩個部分:構建請求和處理響應。構建請求主要包括構造請求方法、設置請求頭、設置請求參數和處理響應等。處理響應則是獲取響應頭、獲取響應主體、獲取響應碼等等。
三、構建請求
1、構造請求方法
要構造一個Http請求方法,我們需要先實例化一個HttpClient對象。這個對象負責管理Http請求的所有資源。之後,我們可以通過執行GET、POST、DELETE等請求來獲得HttpResponse對象:
CloseableHttpClient client = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet(url); HttpResponse response = client.execute(httpGet);
其中,HttpGet類擴展了HttpRequestBase抽象類,因此HttpGet類具有擴展HttpRequestBase類的所有方法和屬性。 response是HttpResponse接口的實現類,包含來自服務器的響應。
2、設置請求頭
設置請求頭可以使用HttpHead類。可以使用addHeader()方法向請求添加單個HTTP標題,也可以使用setHeader()方法將數組傳遞給請求中所有HTTP標題。下面的示例演示如何添加http頭到一個HTTP GET請求:
HttpGet httpGet = new HttpGet("http://localhost:8080/restful/artists/");
httpGet.addHeader("Accept", "application/json");
httpGet.setHeader("User-Agent", "PostmanRuntime/7.26.8");
HttpResponse response = client.execute(httpGet);
3、設置請求參數
如果需要在請求中發送參數,則需要將其設置為HTTP GET方法的一部分。可以使用setURI()方法將請求的參數添加到URL中。如果請求是POST、PUT或DELETE請求,則可以使用setEntity()方法將請求的參數添加到請求正文中:
HttpPost httpPost = new HttpPost(url);
StringEntity params = new StringEntity("{\"name\":\"test\"}");
httpPost.setEntity(params);
httpPost.setHeader("Content-Type", "application/json");
HttpResponse response = client.execute(httpPost);
四、處理響應
1、獲取響應碼
獲取響應狀態碼的最直接方式是直接調用HttpResponse的getStatusLine()方法:
int statusCode = response.getStatusLine().getStatusCode();
2、獲取響應頭
我們可以通過HttpResponse對象的getAllHeaders()方法獲取響應頭部信息,並且可以通過getHeaders()和getFirstHeader()方法獲取指定響應頭的信息:
Header[] headers = response.getAllHeaders();
Header authHeader = response.getFirstHeader("Authorization");
3、獲取響應主體
獲取Http響應主體的最基本的方式是通過HttpResponse對象的getEntity()方法來獲取HttpEntity對象,然後從HttpEntity對象中讀取內容:
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
...
}
五、連接管理
Httpclient有一套完整的連接管理方案,包括從長久或者臨時的連接池中獲取到連接、釋放連接、關閉連接等等。基於這些連接管理可以解決一些網絡方面的問題,比如超時或者過度連接限制等等。下面是一些基本的連接管理:
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpHost target = new HttpHost("httpbin.org", 80, "http");
HttpGet getRequest = new HttpGet("/get");
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000).build();
getRequest.setConfig(config);
System.out.println("executing request to " + target);
CloseableHttpResponse response = httpClient.execute(
target, getRequest);
try {
HttpEntity entity = response.getEntity();
if (entity != null) {
System.out.println("Response content length: "
+ entity.getContentLength());
}
EntityUtils.consume(entity);
} finally {
response.close();
}
} finally {
httpClient.close();
}
六、總結
本文主要介紹了使用Java Httpclient實現Http請求和響應處理的技巧。無論是對於Java開發者還是對於需要進行Http請求的各種應用而言,Httpclient確實是一個很好的工具。
原創文章,作者:QVVO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150185.html
微信掃一掃
支付寶掃一掃