最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java httpClient介紹以及使用示例

 更新時間:2020年10月16日 10:59:09   作者:拾階求上  
這篇文章主要介紹了Java httpClient介紹以及使用示例,幫助大家更好的利用Java實現(xiàn)HTTP請求,感興趣的朋友可以了解下

Java 開發(fā)語言中實現(xiàn)HTTP請求的方法主要有兩種:一種是JAVA的標準類HttpUrlConnection,比較原生的實現(xiàn)方法;另一種是第三方開源框架HTTPClient。

HttpClient相比傳統(tǒng)JDK自帶的URLConnection,增加了易用性和靈活性,它不僅是客戶端發(fā)送Http請求變得容易,而且也方便了開發(fā)人員測試接口(基于Http協(xié)議的),即提高了開發(fā)的效率,也方便提高代碼的健壯性。

一、HttpClient簡單介紹

HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。

HTTPClient對HTTP的封裝性比較不錯,通過它基本上能夠滿足我們大部分的需求。HttpClient3.1 是 org.apache.commons.httpclient下操作遠程 url的工具包,雖然已不再更新,但實現(xiàn)工作中使用httpClient3.1的代碼還是很多。HttpClient4.5 是org.apache.http.client下操作遠程 url的工具包。

二、HttpClient特性

  • 基于標準、純凈的java語言。實現(xiàn)了Http1.0和Http1.1。
  • 以可擴展的面向對象的結構實現(xiàn)了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
  • 支持HTTPS協(xié)議。
  • 通過Http代理建立透明的連接。
  • 利用CONNECT方法通過Http代理建立隧道的https連接。
  • Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。
  • 插件式的自定義認證方案。
  • 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。
  • 連接管理器支持多線程應用。支持設置最大連接數(shù),同時支持設置每個主機的最大連接數(shù),發(fā)現(xiàn)并關閉過期的連接。
  • 自動處理Set-Cookie中的Cookie。
  • 插件式的自定義Cookie策略。
  • Request的輸出流可以避免流中內(nèi)容直接緩沖到socket服務器。
  • Response的輸入流可以有效的從socket服務器直接讀取相應內(nèi)容。
  • 在http1.0和http1.1中利用KeepAlive保持持久連接。
  • 直接獲取服務器發(fā)送的response code和 headers。
  • 設置連接超時的能力。
  • 實驗性的支持http1.1 response caching。
  • 源代碼基于Apache License 可免費獲取。

三、使用方法

使用HttpClient發(fā)送請求、接收響應很簡單,一般需要如下幾步即可。

  1. 創(chuàng)建HttpClient對象。
  2. 創(chuàng)建請求方法的實例,并指定請求URL。如果需要發(fā)送GET請求,創(chuàng)建HttpGet對象;如果需要發(fā)送POST請求,創(chuàng)建HttpPost對象。
  3. 如果需要發(fā)送請求參數(shù),可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數(shù);對于HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數(shù)。
  4. 調用HttpClient對象的execute(HttpUriRequest request)發(fā)送請求,該方法返回一個HttpResponse。
  5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內(nèi)容。程序可通過該對象獲取服務器的響應內(nèi)容。
  6. 釋放連接。無論執(zhí)行方法是否成功,都必須釋放連接

四、使用示例

HttpClient 為第三方Http 客戶端類庫;在開發(fā)過程中主要是發(fā)送Http協(xié)議的Post請求和Get請求。其中Post請求使用HttpPost對象構建、Get請求使用HttpGet對象構建。

HttpGet 請求

public static void main(String[] args) throws Exception {
	// 格式化請求url
  // String cmd=String.format("http://%s:%s@%s",username,password,split[1]);
	
	// 請求地址
  String url = "https://blog.csdn.net/amosjob/article/details/82775290";
  // 創(chuàng)建默認的客戶端實例 
  CloseableHttpClient httpclient = HttpClients.createDefault();
  // 創(chuàng)建get請求實例 
  HttpGet httpGet = new HttpGet(url);
  // 設置頭部信息
  httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
// httpGet.addHeader("x-api-key", "XXX");
// httpGet.addHeader("x-lang", "en-US");
  // 執(zhí)行GET請求 返回響應實體 
  HttpResponse response = httpclient.execute(httpGet);
  // 獲取響應碼
  int statusCode = response.getStatusLine().getStatusCode();
  // 獲取全部的請求頭
  Header[] allHeaders = response.getAllHeaders();
  System.out.println("響應狀態(tài)碼:" + statusCode);
  for (int i = 0; i < allHeaders.length; i++) {
  	 System.out.println("全部的請求頭:" + allHeaders[i]);
	}
  // 獲取響應消息實體 
  HttpEntity entity = response.getEntity();
  //打印輸出網(wǎng)頁的內(nèi)容(可刪除)
  if (entity != null) {
  	// 推薦該辦法打印內(nèi)容
  	System.out.println("響應的內(nèi)容:"+EntityUtils.toString(entity));
  	
  	// 也可以使用這個方法
    InputStream inputStream = entity.getContent();
    InputStreamReader streamReader = new InputStreamReader(inputStream);
    int line;
    line = streamReader.read() ;
    while (line!= -1) {
      System.out.print((char)line);
      line = streamReader.read() ;
    }
  }
	// 關閉連接
	try {
		httpclient.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

HttpPost 請求

public static void main(String[] args) throws Exception {
	// 請求地址
	String url = "https://passport.csdn.net/account/login";
	// 創(chuàng)建默認的客戶端實例
	CloseableHttpClient httpclient = HttpClients.createDefault();
	// 創(chuàng)建POST對象
	HttpPost httpPost = new HttpPost(url);
	// 傳參數(shù)
	List<NameValuePair> params = new ArrayList<NameValuePair>();
	params.add(new BasicNameValuePair("username", "admin"));
	params.add(new BasicNameValuePair("password", "12345"));
	try {
		UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params);
		httpPost.setEntity(entity);
	} catch (Exception e) {
		e.printStackTrace();
	}
	// 執(zhí)行GET請求 返回響應實體
	HttpResponse response = httpclient.execute(httpPost);
	// 獲取響應碼
	int statusCode = response.getStatusLine().getStatusCode();
	// 獲取全部的請求頭
	Header[] allHeaders = response.getAllHeaders();
	System.out.println("響應狀態(tài)碼:" + statusCode);
	for (int i = 0; i < allHeaders.length; i++) {
		System.out.println("全部的請求頭:" + allHeaders[i]);
	}
	// 獲取響應消息實體
	HttpEntity entity = response.getEntity();
	// 打印輸出網(wǎng)頁的內(nèi)容(可刪除)
	if (entity != null) {
		System.out.println("響應的內(nèi)容:"+EntityUtils.toString(entity));
	}
	// 關閉連接
	try {
		httpclient.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

以上就是Java httpClient介紹以及使用示例的詳細內(nèi)容,更多關于Java httpClient的資料請關注腳本之家其它相關文章!

相關文章

最新評論

洪雅县| 颍上县| 瑞昌市| 富平县| 无为县| 馆陶县| 达拉特旗| 徐闻县| 麟游县| 邳州市| 宁蒗| 盱眙县| 岗巴县| 宝山区| 宿松县| 肇庆市| 昌乐县| 丹东市| 盖州市| 阿拉尔市| 开远市| 永靖县| 广安市| 台北县| 韶山市| 巴塘县| 建瓯市| 大石桥市| 凌海市| 苍南县| 中方县| 咸宁市| 天柱县| 阿合奇县| 大洼县| 全州县| 阳信县| 平罗县| 曲松县| 甘泉县| 葫芦岛市|