java中httpclient封裝post請求和get的請求實(shí)例
httpclient封裝post請求和get的請求
在我們程序員生涯中,經(jīng)常要復(fù)用代碼,所以我們應(yīng)該養(yǎng)成時(shí)常整理代碼的好習(xí)慣,以下是我之前封裝的
httpclient的post和get請求所用的代碼
package com.marco.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; 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.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; /** * @author 馬弦 * @date 2017年10月23日 下午2:49 * HttpClient工具類 */ public class HttpUtil { private static Logger logger = Logger.getLogger(HttpUtil.class); /** * get請求 * @return */ public static String doGet(String url) { try { HttpClient client = new DefaultHttpClient(); //發(fā)送get請求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /**請求發(fā)送成功,并得到響應(yīng)**/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /**讀取服務(wù)器返回過來的json字符串?dāng)?shù)據(jù)**/ String strResult = EntityUtils.toString(response.getEntity()); return strResult; } } catch (IOException e) { e.printStackTrace(); } return null; } /** * post請求(用于key-value格式的參數(shù)) * @param url * @param params * @return */ public static String doPost(String url, Map params){ BufferedReader in = null; try { // 定義HttpClient HttpClient client = new DefaultHttpClient(); // 實(shí)例化HTTP方法 HttpPost request = new HttpPost(); request.setURI(new URI(url)); //設(shè)置參數(shù) List<NameValuePair> nvps = new ArrayList<NameValuePair>(); for (Iterator iter = params.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String value = String.valueOf(params.get(name)); nvps.add(new BasicNameValuePair(name, value)); //System.out.println(name +"-"+value); } request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8)); HttpResponse response = client.execute(request); int code = response.getStatusLine().getStatusCode(); if(code == 200){ //請求成功 in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent(),"utf-8")); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); return sb.toString(); } else{ // System.out.println("狀態(tài)碼:" + code); return null; } } catch(Exception e){ e.printStackTrace(); return null; } } /** * post請求(用于請求json格式的參數(shù)) * @param url * @param params * @return */ public static String doPost(String url, String params) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url);// 創(chuàng)建httpPost httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-Type", "application/json"); String charSet = "UTF-8"; StringEntity entity = new StringEntity(params, charSet); httpPost.setEntity(entity); CloseableHttpResponse response = null; try { response = httpclient.execute(httpPost); StatusLine status = response.getStatusLine(); int state = status.getStatusCode(); if (state == HttpStatus.SC_OK) { HttpEntity responseEntity = response.getEntity(); String jsonString = EntityUtils.toString(responseEntity); return jsonString; } else{ logger.error("請求返回:"+state+"("+url+")"); } } finally { if (response != null) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }
httpclient是一個(gè)非常常用的工具,在項(xiàng)目開發(fā)的時(shí)候,經(jīng)常需要請求第三方的接口,我整理好了這段代碼,以后回頭找的時(shí)候就方便啦!
HttpClient發(fā)送Get、Post請求的實(shí)踐
1. 配置及實(shí)例化HttpClient
private static final CloseableHttpClient httpclient; public static final String CHARSET = "UTF-8"; static{ RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(3000).build(); httpclient = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); }
2. 發(fā)送Get請求方法
/** * HTTP Get 獲取內(nèi)容 * @param url請求的url地址 ?之前的地址 * @param params請求的參數(shù) * @param charset編碼格式 * @return 頁面內(nèi)容 */ public static String sendGet(String url, Map<String, Object> params) throws ParseException, UnsupportedEncodingException, IOException{ if(params !=null && !params.isEmpty()){ List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size()); for (String key :params.keySet()){ pairs.add(new BasicNameValuePair(key, params.get(key).toString())); } url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(pairs), CHARSET); } HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = httpclient.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if(statusCode !=200){ httpGet.abort(); throw new RuntimeException("HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null; if (entity != null) { result = EntityUtils.toString(entity, "utf-8"); EntityUtils.consume(entity); response.close(); return result; }else{ return null; } }
3. 發(fā)送Post請求方法
/** * HTTP Post 獲取內(nèi)容 * @param url請求的url地址 ?之前的地址 * @param params請求的參數(shù) * @param charset編碼格式 * @return 頁面內(nèi)容 * @throws IOException * @throws ClientProtocolException */ public static String sendPost(String url, Map<String, Object> params) throws ClientProtocolException, IOException { List<NameValuePair> pairs = null; if (params != null && !params.isEmpty()) { pairs = new ArrayList<NameValuePair>(params.size()); for (String key : params.keySet()) { pairs.add(new BasicNameValuePair(key, params.get(key).toString())); } } HttpPost httpPost = new HttpPost(url); if (pairs != null && pairs.size() > 0) { httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET)); } CloseableHttpResponse response = httpclient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { httpPost.abort(); throw new RuntimeException("HttpClient,error status code :" + statusCode); } HttpEntity entity = response.getEntity(); String result = null; if (entity != null) { result = EntityUtils.toString(entity, "utf-8"); EntityUtils.consume(entity); response.close(); return result; }else{ return null; } }
4. 編寫測試用例,進(jìn)行Get 、Post請求方法的測試
4.1 測試Get方法,e .g:
@Test public void testGet() throws ParseException, UnsupportedEncodingException, IOException { String testUrl01 = "具體的測試接口地址"; Map<String, Object> params01 = new HashMap<>(); params01.put("參數(shù)01", "對應(yīng)的參數(shù)取值"); params01.put("參數(shù)02", "對應(yīng)的參數(shù)取值"); System.out.println(sendGet(testUrl01, params01)); }
4.2 測試Post方法,e.g:
@Test public void testPost() throws ClientProtocolException, IOException { String testUrl02 = "具體的測試接口地址"; Map<String, Object> params02 = new HashMap<>(); params02.put("參數(shù)01", "對應(yīng)的參數(shù)取值"); params02.put("參數(shù)02", "對應(yīng)的參數(shù)取值"); System.out.println(sendPost(testUrl02, params02)); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- java?11新特性HttpClient主要組件及發(fā)送請求示例詳解
- Java通過httpclient比較重定向和請求轉(zhuǎn)發(fā)
- Java HttpClient執(zhí)行請求時(shí)配置cookie流程詳細(xì)講解
- Java HttpClient-Restful工具各種請求高度封裝提煉及總結(jié)
- java爬蟲之使用HttpClient模擬瀏覽器發(fā)送請求方法詳解
- java發(fā)送form-data請求實(shí)現(xiàn)文件上傳的示例代碼
- Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例
- Java后臺接收數(shù)據(jù)的三種方式(url、form-data與application/json)
- Java httpclient請求form-data格式并設(shè)置boundary代碼實(shí)現(xiàn)方法
相關(guān)文章
Spring Cloud引入Eureka組件,完善服務(wù)治理
這篇文章主要介紹了Spring Cloud引入Eureka組件,完善服務(wù)治理的過程詳解,幫助大家更好的理解和使用spring cloud,感興趣的朋友可以了解下2021-02-02springboot構(gòu)建docker鏡像并推送到阿里云
本文主要介紹了springboot構(gòu)建docker鏡像并推送到阿里云,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05SpringBoot this調(diào)用@Bean效果詳解
這篇文章主要介紹了在一個(gè)@Bean方法內(nèi),this調(diào)用同一個(gè)類的@Bean方法會有什么效果,我們可以通過bean的名稱、bean的類型或者bean的名稱+類型來獲取容器中的bean2023-02-02Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案
這篇文章主要介紹了Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06在Eclipse IDE使用Gradle構(gòu)建應(yīng)用程序(圖文)
這篇文章主要介紹了在Eclipse IDE使用Gradle構(gòu)建應(yīng)用程序(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12