現在的接口開發,大部分是基於http的請求和處理,現在整理了一份常用的調用方式工具類
package com.xh.oms.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; 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.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class HttpClientUtil { /** * 發送post請求,json格式數據 * @param url * @param params * @return */ public static JSONObject postJsonData(String url,Map<String,String> params){ CloseableHttpClient httpclient = HttpClientUtil.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("Authorization", "your token"); //認證token httpPost.addHeader("Content-type","application/json; charset=utf-8"); httpPost.addHeader("User-Agent", "imgfornote"); httpPost.setHeader("Accept", "application/json"); //拼接參數 JSONObject jsonParams = new JSONObject(); for (Map.Entry<String, String> entry : params.entrySet()) { String key = entry.getKey().toString(); String value = entry.getValue().toString(); jsonParams.put(key, value); } //配置請求超時時間 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(1*60*1000) //設置連接超時時間,單位毫秒 // .setConnectionRequestTimeout(1000) //設置從connect Manager獲取Connection 超時時間,單位毫秒。這個屬性是新加的屬性,因為目前版本是可以共享連接池的。 .setSocketTimeout(3*60*1000).build(); //請求獲取數據的超時時間,單位毫秒。 如果訪問一個接口,多少時間內無法返回數據,就直接放棄此次調用。 httpPost.setConfig(requestConfig); CloseableHttpResponse response=null; try { httpPost.setEntity(new StringEntity(jsonParams.toString(), Charset.forName("UTF-8"))); response = httpclient.execute(httpPost); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } /**請求發送成功,並得到響應**/ JSONObject jsonObject=null; if(response != null){ if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ HttpEntity httpEntity = response.getEntity(); String result=null; try { result = EntityUtils.toString(httpEntity); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 返回json格式: jsonObject = JSONObject.fromObject(result); } } return jsonObject; } /** * 發送post請求 * @param url * @param params * @return */ public static JSONObject postData(String url,Map<String,String> params){ CloseableHttpClient httpclient = HttpClientUtil.createDefault(); HttpPost httpPost = new HttpPost(url); //拼接參數 List<NameValuePair> list = new ArrayList<NameValuePair>(); for (Map.Entry<String, String> entry : params.entrySet()) { String key = entry.getKey().toString(); String value = entry.getValue().toString(); NameValuePair pair = new BasicNameValuePair(key, value); list.add(pair); } CloseableHttpResponse response=null; try { httpPost.setEntity(new UrlEncodedFormEntity(list,"UTF-8")); response = httpclient.execute(httpPost); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } /**請求發送成功,並得到響應**/ JSONObject jsonObject=null; if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ HttpEntity httpEntity = response.getEntity(); String result=null; try { result = EntityUtils.toString(httpEntity); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 返回json格式: jsonObject = JSONObject.fromObject(result); } return jsonObject; } /** * 向指定URL發送GET方法的請求 * * @param url * 發送請求的URL * @param param * 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。 * @return URL 所代表遠程資源的響應結果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打開和URL之間的連接 URLConnection connection = realUrl.openConnection(); // 設置通用的請求屬性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立實際的連接 connection.connect(); // 獲取所有響應頭字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍歷所有的響應頭字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定義 BufferedReader輸入流來讀取URL的響應 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("發送GET請求出現異常!" + e); e.printStackTrace(); } // 使用finally塊來關閉輸入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * get請求 * @param url * @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。 * @return */ public static JSONObject httpGet(String url, String param){ JSONObject jsonResult = null; //get請求返回結果 try { CloseableHttpClient httpclient = HttpClientUtil.createDefault(); //發送get請求 HttpGet request = new HttpGet(url); URI realUrl = new URI(url + "?" + param); request.setURI(realUrl); HttpResponse response = httpclient.execute(request); /**請求發送成功,並得到響應**/ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { /**讀取服務器返回過來的json字符串數據**/ String strResult = EntityUtils.toString(response.getEntity()); /**把json字符串轉換成json對象**/ jsonResult = JSONObject.fromObject(strResult); url = URLDecoder.decode(url, "UTF-8"); } else { System.out.println("get請求提交失敗:" + url); } } catch (IOException e) { e.printStackTrace(); }catch (Exception e) { e.printStackTrace(); } return jsonResult; } /** * Creates {@link CloseableHttpClient} instance with default * configuration. */ public static CloseableHttpClient createDefault() { return HttpClientBuilder.create().build(); } }