1. 程式人生 > >使用Apache中的HttpClient的例項CloseableHttpClient的一個例子

使用Apache中的HttpClient的例項CloseableHttpClient的一個例子

Apache的HttpClient可以被用於從客戶端傳送HTTP請求到伺服器端,下面給出一個用HttpClient執行GET和POST請求的操作方法

使用maven構建依賴包:

            <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId
>
httpclient</artifactId> <version>${httpclient.version}</version> </dependency>

注意此httpClient包從4.4開始SSLContexts類就被移去了,我在使用4.3.1版本.其中的jar列表如下:jar包列表

使用Apache的HttpClient傳送GET和POST請求的步驟如下:
1. 使用幫助類HttpClients建立CloseableHttpClient物件.
2. 基於要傳送的HTTP請求型別建立HttpGet或者HttpPost例項.
3. 使用addHeader方法新增請求頭部,諸如User-Agent, Accept-Encoding等引數.
4. 對於POST請求,建立NameValuePair列表,並新增所有的表單引數.然後把它填充進HttpPost實體.
5. 通過執行此HttpGet或者HttpPost請求獲取CloseableHttpResponse例項
6. 從此CloseableHttpResponse例項中獲取狀態碼,錯誤資訊,以及響應頁面等等.
7. 最後關閉HttpClient資源.

下面給出示例程式碼:

package com.journaldev.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import
org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; public class ApacheHttpClientExample { private static final String USER_AGENT = "Mozilla/5.0"; private static final String GET_URL = "http://localhost:9090/SpringMVCExample"; private static final String POST_URL = "http://localhost:9090/SpringMVCExample/home"; public static void main(String[] args) throws IOException { sendGET(); System.out.println("GET DONE"); sendPOST(); System.out.println("POST DONE"); } private static void sendGET() throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(GET_URL); httpGet.addHeader("User-Agent", USER_AGENT); CloseableHttpResponse httpResponse = httpClient.execute(httpGet); System.out.println("GET Response Status:: " + httpResponse.getStatusLine().getStatusCode()); BufferedReader reader = new BufferedReader(new InputStreamReader( httpResponse.getEntity().getContent())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { response.append(inputLine); } reader.close(); // print result System.out.println(response.toString()); httpClient.close(); } private static void sendPOST() throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(POST_URL); httpPost.addHeader("User-Agent", USER_AGENT); List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(); urlParameters.add(new BasicNameValuePair("userName", "Pankaj Kumar")); HttpEntity postParams = new UrlEncodedFormEntity(urlParameters); httpPost.setEntity(postParams); CloseableHttpResponse httpResponse = httpClient.execute(httpPost); System.out.println("POST Response Status:: " + httpResponse.getStatusLine().getStatusCode()); BufferedReader reader = new BufferedReader(new InputStreamReader( httpResponse.getEntity().getContent())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { response.append(inputLine); } reader.close(); // print result System.out.println(response.toString()); httpClient.close(); } }

輸出結果如下所示 :

GET Response Status:: 200
<html><head>    <title>Home</title></head><body><h1>    Hello world!  </h1><P>  The time on the server is March 7, 2015 1:01:22 AM IST. </p></body></html>
GET DONE
POST Response Status:: 200
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>User Home Page</title></head><body><h3>Hi Pankaj Kumar</h3></body></html>
POST DONE

參考網址:看這裡

相關推薦

使用ApacheHttpClient例項CloseableHttpClient一個例子

Apache的HttpClient可以被用於從客戶端傳送HTTP請求到伺服器端,下面給出一個用HttpClient執行GET和POST請求的操作方法 使用maven構建依賴包: <!-- https://mvnreposit

使用ApacheHttpClient例項CloseableHttpClient進行http請求

    對接咪咕音源場景重現:現在公司儲存音樂的id標識等資訊,不包含音樂url。想獲得音樂url,需要 和咪咕進行音源對接。根據咪咕提供的服務介面,實現業務對接。     首先,根據音樂id獲得url,需要拼裝url請求,再新增header頭部資訊。其中,url拼裝比較簡

java什麽是Yield給出一個例子

process ron rac 占用 itl its 繼續 並行 code 馬克-to-win:yield英文是屈服投降的意思。 (視頻下載) (全部書籍)當前線程投降就是當前線程希望釋放CPU的自己的占用權,( 但系統可以忽略它這個請求。)參見: https://docs

java什麽是線程安全給出一個例子

who pub begin ati () pan 大白 執行 這就是 8.線程安全 什麽是線程安全? 馬克-to-win: (視頻下載) (全部書籍)最大的大白話,你的代碼一個線程執行挺好,一上多線程測試就玩兒完(結果不是你所想要的),這就是線程不安全。反之為線程安全。首

java什麽是線程不安全給出一個例子

class spa except one ref exceptio lan sleep print 下面我們再給出一個線程不安全的例子。 (視頻下載) (全部書籍)例:1.8.2-本章源碼class BookMark_to_win { int bookNum=10;

46.一個例子瞭解C++異常處理

異常處理的棧展開、解構函式和建構函式的異常,異常處理的層次 catch的搜尋匹配 。。。 class wrong :public exception { public: wrong(const int& i = 0,const string& str = ""):err

mysqlcase的一個例子

最近遇到一個問題: year amount num 1991 1 1.1 1991 2 1.2 1991 3 1.3 1

C語言實戰105例子——例項1 一個價值“三天”的bug

scanf家族的使用 int fscanf (FILE *stream»char const *format, …) int scanf (char const *format,…) int sscanf(char const *string,char const *form

Beego前後端資料是如何實現互動的,Get|Struct|JSON / Request Body, 一個例子醍醐灌頂

1、get方式獲取引數 Get、POST 等方式的請求,beego 裡面會自動解析這些資料。 比如一個登陸頁面的實現 前端我們是Post,使用者名稱和密碼 <form class="login_form" name = "login"method = "post" ac

Servlet請給出一個Cookie的增刪改查的例子

2.Servlet與Cookie:(視訊下載) (全部書籍) 馬 克-to-win:Cookie有點像Session。Session是把鍵值對存在伺服器端,一個Servlet存值 ,另外一個Servlet可以取值。Cookie也是以鍵值對的形式用於讀取,不過是儲存在客戶端 瀏覽器的某個文本

shell與運算 cut切分行 if while綜合在一起的一個例子

  前言: 公司要統計 treasury庫hive表磁碟空間,寫了個指令碼,如下:   查詢hive倉庫表佔用hdfs檔案大小: hadoop fs -du -h  /user/hive/warehouse/treasury.db  > treasury

關於訊號反射的模擬(針對《訊號完整性分析》一書一個例子

關於訊號反射的模擬。 使用工具為ltspice。 書中舉例為:源電壓是1V,內阻是10歐姆,進入實際時延為1ns的50歐姆傳輸線,假設傳輸線末端開路。 圖1 模擬電路圖       由於內阻為10歐姆,瞬態阻抗為50歐姆,所以在進入傳輸線時,電壓被分壓為1*50/(50+1

Shiro最簡單的一個身份驗證例子

Shiro作為一個Java安全框架,身份驗證是它最基本的功能。 首先給出shiro的Maven配置 <dependencies> <dependency>

Redis的安裝、使用以及php擴充套件redis並實現php操作redis的一個例子

1、下載原始碼包redis-2.8.21.tar.gz,並將其上傳到指定目錄/urs/src,然後對其進行解壓: [[email protected] src]# tar -xvf redis-2.8.21.tar.gz 進入解壓後的目錄,並執行下面命令,指定安裝

java什麼是Yield給出一個例子

馬克-to-win:yield英文是屈服投降的意思。當前執行緒投降就是當前執行緒希望釋放CPU的自己的佔用權,( 但系統可以忽略。)參見:https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#yield%28%29其中有這麼句話: A

iOS開發-一個例子學習iOS的常見設計模式

原文iOS Design Patterns iOS設計模式 ,你可能已經聽說過這個術語,但你知道這意味著什麼嗎?雖然大多數的開發人員認為設計模式是非常重要的,但目前關於這個問題的文章不是很多,我們的開發人員有時寫程式碼有時不注重設計模式。 設計模式是軟體設

一個例子告訴你什麼是封裝,繼承和多型(C++ 程式碼例項) (一)

add by WJB   date 2018/08/30 面向物件的三大特性:封裝,繼承和多型; 封裝:將事物擁有的屬性和動作隱藏起來,只保留特定的方法與外界聯絡。 繼承:子類可以擁有父類的屬性和方法; 多型:以說是“一個介面,多種實現”或者說是父類的引用變數可以指向

jQueryajax應用的一個例項(前端+controller)

頁面的程式碼:if(filesArray.length>0) { $.ajax({ type: "post", url: "****/****/sendFiles", //data:JSON.stringify(f

stl 怎樣遍歷一個map的所有元素。請給是例項

兩 種方式iterator遍歷的次數是相同的,但在STL中效率不同,前++--返回引用,後++--返回一個臨時物件,因為iterator是類模板,使 用it++這種形式要返回一個無用的臨時物件,而it++是函式過載,所以編譯器無法對其進行優化,所以每遍歷一個元素,你就建立並銷燬了一個無用的臨

一個例子看Python3.x序列解包

假如一個字串'ABCDEFGH',要輸出下列格式: 即: 每次取出第一個作為首,然後的字串拆成列表,放置在後面,最後成上面的輸出: 一般的處理是: >>> s = 'ABCDEF