亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java httpClient介紹以及使用示例

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

Java 開發(fā)語言中實現(xiàn)HTTP請求的方法主要有兩種:一種是JAVA的標(biāo)準(zhǔn)類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)應(yīng)用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。

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

二、HttpClient特性

  • 基于標(biāo)準(zhǔn)、純凈的java語言。實現(xiàn)了Http1.0和Http1.1。
  • 以可擴(kuò)展的面向?qū)ο蟮慕Y(jié)構(gòu)實現(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認(rèn)證方案。
  • 插件式的自定義認(rèn)證方案。
  • 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。
  • 連接管理器支持多線程應(yīng)用。支持設(shè)置最大連接數(shù),同時支持設(shè)置每個主機(jī)的最大連接數(shù),發(fā)現(xiàn)并關(guān)閉過期的連接。
  • 自動處理Set-Cookie中的Cookie。
  • 插件式的自定義Cookie策略。
  • Request的輸出流可以避免流中內(nèi)容直接緩沖到socket服務(wù)器。
  • Response的輸入流可以有效的從socket服務(wù)器直接讀取相應(yīng)內(nèi)容。
  • 在http1.0和http1.1中利用KeepAlive保持持久連接。
  • 直接獲取服務(wù)器發(fā)送的response code和 headers。
  • 設(shè)置連接超時的能力。
  • 實驗性的支持http1.1 response caching。
  • 源代碼基于Apache License 可免費(fèi)獲取。

三、使用方法

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

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

四、使用示例

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

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)建默認(rèn)的客戶端實例 
  CloseableHttpClient httpclient = HttpClients.createDefault();
  // 創(chuàng)建get請求實例 
  HttpGet httpGet = new HttpGet(url);
  // 設(shè)置頭部信息
  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請求 返回響應(yīng)實體 
  HttpResponse response = httpclient.execute(httpGet);
  // 獲取響應(yīng)碼
  int statusCode = response.getStatusLine().getStatusCode();
  // 獲取全部的請求頭
  Header[] allHeaders = response.getAllHeaders();
  System.out.println("響應(yīng)狀態(tài)碼:" + statusCode);
  for (int i = 0; i < allHeaders.length; i++) {
  	 System.out.println("全部的請求頭:" + allHeaders[i]);
	}
  // 獲取響應(yīng)消息實體 
  HttpEntity entity = response.getEntity();
  //打印輸出網(wǎng)頁的內(nèi)容(可刪除)
  if (entity != null) {
  	// 推薦該辦法打印內(nèi)容
  	System.out.println("響應(yīng)的內(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() ;
    }
  }
	// 關(guān)閉連接
	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)建默認(rèn)的客戶端實例
	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請求 返回響應(yīng)實體
	HttpResponse response = httpclient.execute(httpPost);
	// 獲取響應(yīng)碼
	int statusCode = response.getStatusLine().getStatusCode();
	// 獲取全部的請求頭
	Header[] allHeaders = response.getAllHeaders();
	System.out.println("響應(yīng)狀態(tài)碼:" + statusCode);
	for (int i = 0; i < allHeaders.length; i++) {
		System.out.println("全部的請求頭:" + allHeaders[i]);
	}
	// 獲取響應(yīng)消息實體
	HttpEntity entity = response.getEntity();
	// 打印輸出網(wǎng)頁的內(nèi)容(可刪除)
	if (entity != null) {
		System.out.println("響應(yīng)的內(nèi)容:"+EntityUtils.toString(entity));
	}
	// 關(guān)閉連接
	try {
		httpclient.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

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

相關(guān)文章

  • SpringBoot2.x配置HTTPS訪問的過程

    SpringBoot2.x配置HTTPS訪問的過程

    這篇文章主要介紹了SpringBoot2.x配置HTTPS訪問的過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 輕松掌握J(rèn)ava適配器模式

    輕松掌握J(rèn)ava適配器模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava適配器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 打造一款代碼命名工具的詳細(xì)教程

    打造一款代碼命名工具的詳細(xì)教程

    這篇文章主要介紹了來,我們一起打造一款代碼命名工具,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • springboot @Valid注解對嵌套類型的校驗功能

    springboot @Valid注解對嵌套類型的校驗功能

    這篇文章主要介紹了springboot~@Valid注解對嵌套類型的校驗,主要介紹 @Valid在項目中的使用,需要的朋友可以參考下
    2018-05-05
  • 兩種java文件上傳實例講解

    兩種java文件上傳實例講解

    這篇文章主要為大家詳細(xì)介紹了兩種java文件上傳實例,一種是附件上傳,另一種是上傳簡歷功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • SpringBoot過濾敏感詞的兩種實現(xiàn)方式

    SpringBoot過濾敏感詞的兩種實現(xiàn)方式

    Spring Boot本身并不直接提供過濾敏感詞的功能,但你可以使用第三方庫或者自定義過濾器來實現(xiàn)這個需求,所以本文給大家介紹了SpringBoot過濾敏感詞的兩種實現(xiàn)方式,感興趣的朋友可以參考下
    2024-06-06
  • springBoot項目中的全局異常處理和自定義異常處理實現(xiàn)

    springBoot項目中的全局異常處理和自定義異常處理實現(xiàn)

    異常是由于程序邏輯錯誤、運(yùn)行環(huán)境問題、用戶輸入錯誤等原因?qū)е碌囊环N非正常的狀態(tài)或事件,本文主要介紹了springBoot項目中的全局異常處理和自定義異常處理實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Java中token的存儲和獲取實例代碼

    Java中token的存儲和獲取實例代碼

    關(guān)于java獲取微信Token驗證的問題相信很多人都遇見過,尤其是對剛接觸微信開發(fā)的人來說確實有點(diǎn)棘手,下面這篇文章主要給大家介紹了關(guān)于Java中token存儲和獲取的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Java設(shè)計模式中裝飾者模式應(yīng)用詳解

    Java設(shè)計模式中裝飾者模式應(yīng)用詳解

    裝飾者模式:在不改變原有對象的基礎(chǔ)之上,動態(tài)的將功能附加到對象上,提供了繼承更有彈性的替代方案,也體現(xiàn)了開閉原則。本文將通過示例詳細(xì)講解一下裝飾者模式,需要的可以參考一下
    2022-11-11
  • SpringBoot?整合?EasyExcel?實現(xiàn)自由導(dǎo)入導(dǎo)出功能

    SpringBoot?整合?EasyExcel?實現(xiàn)自由導(dǎo)入導(dǎo)出功能

    在實際的業(yè)務(wù)系統(tǒng)開發(fā)過程中,操作 Excel 實現(xiàn)數(shù)據(jù)的導(dǎo)入導(dǎo)出基本上是個非常常見的需求,這篇文章主要介紹了SpringBoot?整合?EasyExcel?實現(xiàn)自由導(dǎo)入導(dǎo)出功能,需要的朋友可以參考下
    2024-06-06

最新評論