近日面褐,公司決定使用HttpClient 發(fā)送HttpPost請求,跟浦發(fā)銀行對接數(shù)據(jù)。發(fā)送HttpPost請求傳輸數(shù)據(jù)充择,想講一下如何用HttpClient 客戶端發(fā)送HttpPost 請求德玫,傳輸數(shù)據(jù)。
1.了解Http
? ? ? ? http:為超文本傳輸協(xié)議椎麦,是互聯(lián)網(wǎng)通訊最基礎的協(xié)議宰僧。是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效观挎,使網(wǎng)絡傳輸減少
1.創(chuàng)建Httpclient?
如java Api所示 HttpClient 是一個接口 琴儿,因此創(chuàng)建HttpClient需創(chuàng)建他的實現(xiàn)類。
如:HttpClient httpClient = new DefaultHttpClient();??
或者使用Builder 模式 HttpClient httpClient = HttpClientBuilder.create().build();
或許在這里有人問了嘁捷。HttpClientBuilder 是什么造成。。我們可以一起去看看Api?
從這里可以看出HttpClientBuilder 是一個類 該類基礎Object 可以創(chuàng)建一個CloseableHttpClient 該類也實現(xiàn)了 HttpClient客戶端雄嚣。那么create()和builde()方法呢
那么HttpClient客戶端創(chuàng)建好了如何創(chuàng)建請求呢晒屎?
二。創(chuàng)建HttpPost請求
從文檔可以看出來HttpPost 是一個類 那么我們可以直接實例化這個類??HttpPost httpPost = new HttPost("192.168.0.1"); 然后我們可以看構造器需要傳遞什么參數(shù)
分別為空缓升,String url和URI 類型的?
HttpPost請求出來了鼓鲁,那么我們?nèi)绾蝹鬟f和設置參數(shù)呢
三。創(chuàng)建一個HttpEntity
從反編譯可以看出HttpEntity是一個接口 港谊,那么實現(xiàn)這個接口的有那些類呢骇吭?AbstractHttpEntity,BasicHttpEntity歧寺,BufferedHttpEntity绵跷,ByteArrayEntity膘螟,InputStreamEntity,StringEntity碾局。這些接口都實現(xiàn)了HttEntity 接口
我們就以ByteArrayEntity 經(jīng)行講解 從API可以看出 ByteArrayEntity的參數(shù)
HttpEntity httpEntity = new ByteArrayEntity(json.getBytes("UTF-8"),ContentType.APPLICATION_JSON);
httpEntity 是用來設置和傳遞傳輸?shù)木2小H绾钨x給HttpPost呢
用HttpPost.setEntity(httpEntity)賦值給HttpPost;
HttpClient 和HttpPost 和HttpEntity 創(chuàng)建好了 ?就可以了忙净当? 不還差一點
如:需要設置 該請求的超時時間内斯。如果不設置超時時間,會導致該請求長時間等待像啼,無法相應俘闯。
1.實例化一個RequestConfig 對象
?RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeOUt(3000).setConnectionTimeOut(300).setSocketTimeout(3000).setStaleConnectionCheckEnabled(3000).build();
2.HttpPost.setConfig(requestConfig); 這樣就可以設置當前HttpPost請求是否超時了
好了,現(xiàn)在我們就可以利用HttpClient發(fā)送httpPost請求了
HttpClient.excete(httpPost);
以下是我封裝好的代碼忽冻,請各位有錯在下方留言
好啦真朗,HttpClient發(fā)送HttpPost請求 到這里就Ok 了 其實也可以發(fā)送HttpGet請求的哦,可以按照我的代碼發(fā)送一個Get請求哦僧诚。