一、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-tw/n/150185.html