package jkcs; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; 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 jiekoumoni { public static void main(String[] args) throws ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); //創建一個http客戶端 HttpGet httpGet = new HttpGet("http://www.baidu.com"); // 通過httpget方式來實現我們的get請求 CloseableHttpResponse Response = client.execute(httpGet); // 通過client調用execute方法,得到我們的執行結果就是一個response,所有的數據都封裝在response里面了 System.out.println(Response.getProtocolVersion()); System.out.println(Response.getStatusLine()); //打印捕獲的返回狀態 System.out.println(Response.getStatusLine().getStatusCode()); //打印捕獲的狀態碼 Response.close(); // 關閉 } }
執行結果:
HTTP/1.1
HTTP/1.1 200 OK
200
===========================================================================================
簡介
HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。
HttpClient最新版本是HttpClient 4.5.3 (GA)。
官方下載:http://hc.apache.org/downloads.cgi
主要特性
- 基於標准、純凈的Java語言,實現了HTTP1.0和HTTP1.1。
- 以可擴展的面向對象的結構實現了HTTP全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
- 支持加密的HTTPS協議(HTTP通過SSL協議)。
- 通過HTTP代理方式建立透明的連接。
- 利用CONNECT方法通過HTTP代理建立隧道的HTTPS連接。
- Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。
- 插件式的自定義認證方案。
- 可插拔的安全套接字工廠,使得接入第三方解決方案變得更容易
- 連接管理支持使用多線程的的應用。支持設置最大連接數,同時支持設置每個主機的最大連接數,發現並關閉過期的連接。
- 自動化處理Set-Cookie:來自服務器的頭,並在適當的時候將它們發送回cookie。
- 可以自定義Cookie策略的插件化機制。
- Request的輸出流可以避免流中內容體直接從socket緩沖到服務器。
- Response的輸入流可以有效的從socket服務器直接讀取相應內容。
- 在HTTP1.0和HTTP1.1中使用用KeepAlive來保持持久連接。
- 可以直接獲取服務器發送的響應碼和響應頭部。
- 具備設置連接超時的能力。
- 支持HTTP/1.1 響應緩存。
- 源代碼基於Apache License 可免費獲取。
一般使用步驟
使用HttpClient發送請求、接收響應,一般需要以下步驟。
HttpGet請求響應的一般步驟:
1). 創建HttpClient
對象,可以使用HttpClients.createDefault()
;
2). 如果是無參數的GET請求,則直接使用構造方法HttpGet(String url)
創建HttpGet
對象即可;
如果是帶參數GET請求,則可以先使用URIBuilder(String url)
創建對象,再調用addParameter(String param, String value)
,
或setParameter(String param, String value)
來設置請求參數,並調用build()方法構建一個URI對象。只有構造方法HttpGet(URI uri)
來創建HttpGet對象。
3). 創建HttpResponse
,調用HttpClient
對象的execute(HttpUriRequest request)
發送請求,該方法返回一個HttpResponse
。
調用HttpResponse
的getAllHeaders()、getHeaders(String name)
等方法可獲取服務器的響應頭;
調用HttpResponse
的getEntity()
方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。
程序可通過該對象獲取服務器的響應內容。通過調用getStatusLine().getStatusCode()
可以獲取響應狀態碼。
4). 釋放連接。
HttpPost請求響應的一般步驟:
1). 創建HttpClient
對象,可以使用HttpClients.createDefault()
;
2). 如果是無參數的GET請求,則直接使用構造方法HttpPost(String url)
創建HttpPost
對象即可;
如果是帶參數POST請求,先構建HttpEntity對象並設置請求參數,然后調用setEntity(HttpEntity entity)創建HttpPost對象。
3). 創建HttpResponse
,調用HttpClient
對象的execute(HttpUriRequest request)
發送請求,該方法返回一個HttpResponse
。
調用HttpResponse
的getAllHeaders()、getHeaders(String name)
等方法可獲取服務器的響應頭;
調用HttpResponse
的getEntity()
方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。
通過調用getStatusLine().getStatusCode()
可以獲取響應狀態碼。
4). 釋放連接。
轉載:鏈接:https://www.jianshu.com/p/375be5929bed