利用HttpClient來發送get與post請求
阿新 • • 發佈:2019-01-02
匯入pom檔案
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.1</version> </dependency> <dependency> <groupId>com.facebook.presto</groupId> <artifactId>presto-jdbc</artifactId> <version>0.152</version> </dependency>
開始傳送請求
package com.example.demo.config; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.parser.Feature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.facebook.presto.jdbc.internal.guava.collect.Maps; @SuppressWarnings("deprecation") public class HttpUtils { private static final Logger log= LoggerFactory.getLogger(HttpUtils.class); public static String httpGetTool(List<NameValuePair> nvps, String urlPath, Map headerMap) { System.out.println(nvps + " " + urlPath + " " + headerMap); //HttpEntity entity = new UrlEncodedFormEntity(pairs,HTTP.UTF_8); long stime = System.currentTimeMillis(); HttpClient http = new DefaultHttpClient(); http.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,3600000);//連線時間 http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,3600000);//資料傳輸時間 StringBuilder url = new StringBuilder(urlPath); StringBuffer sb = new StringBuffer(); if (null != nvps && nvps.size() > 0) { url.append("?"); for (int i = 0; i < nvps.size(); i++) { try { String value = nvps.get(i).getValue(); if (value != null) { url.append(nvps.get(i).getName()).append("=").append(URLEncoder.encode(value, "utf-8")) .append("&"); } } catch (UnsupportedEncodingException e) { log.error("{}", e); } } if (url.toString().endsWith("&")) { url.deleteCharAt(url.lastIndexOf("&")); } } HttpGet httpget = new HttpGet(url.toString()); try { setHeader(httpget, headerMap); HttpResponse response = http.execute(httpget); HttpEntity entity = response.getEntity(); // 顯示結果 BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "utf-8")); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } if (reader != null) { reader.close(); } } catch (UnsupportedEncodingException e) { httpget.abort(); log.error("{}", e); } catch (ClientProtocolException e) { httpget.abort(); log.error("{}", e); } catch (IOException e) { httpget.abort(); log.error("{}", e); } finally { //log.info("|" + (System.currentTimeMillis() - stime) + ":ms|" + url.toString() + "|" + sb.toString()); } return sb.toString(); } public static JSONObject httpPostTool(List<NameValuePair> nvps, String urlPath, Map headerMap, int connection_timeout, int so_timeout) { long stime = System.currentTimeMillis(); HttpClient http = new DefaultHttpClient(); http.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connection_timeout);//連線時間 http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, so_timeout);//資料傳輸時間 HttpPost httpPost = new HttpPost(urlPath); UrlEncodedFormEntity entityform; StringBuffer sb = new StringBuffer(); String tmpParam = ""; boolean f = false; try { entityform = new UrlEncodedFormEntity(nvps, HTTP.UTF_8); tmpParam = EntityUtils.toString(entityform); setHeader(httpPost, headerMap); httpPost.setEntity(entityform); HttpResponse response = http.execute(httpPost); long executetime = System.currentTimeMillis() - stime; if(executetime >= connection_timeout){ f = true; } HttpEntity entity = response.getEntity(); // 顯示結果 BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8")); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } if (reader != null) { reader.close(); } } catch(Exception e) { log.error(urlPath,e); } finally { log.info("|" + (System.currentTimeMillis() - stime) + ":ms|" + urlPath + "|" ); } LinkedHashMap<String, Object> root = Maps.newLinkedHashMap(); try { if (sb != null) { root = JSONObject.parseObject(sb.toString(),new TypeReference<LinkedHashMap<String, Object>>(){}, Feature.OrderedField); } } catch (Exception e) { log.error(e.getMessage(), e); log.error(sb.toString()); } JSONObject jsonObject = new JSONObject(root); if(jsonObject != null && f){ jsonObject.put("timeout", 1); }/* else if(jsonObject == null){ jsonObject = new JSONObject(); }*/ return jsonObject; } public static String httpPostTool(List<NameValuePair> nvps, String urlPath, Map headerMap) { long stime = System.currentTimeMillis(); HttpClient http = new DefaultHttpClient(); http.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3600000);//連線時間 http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 3600000);//資料傳輸時間 HttpPost httpPost = new HttpPost(urlPath); UrlEncodedFormEntity entityform; StringBuffer sb = new StringBuffer(); String tmpParam = ""; try { entityform = new UrlEncodedFormEntity(nvps, HTTP.UTF_8); tmpParam = EntityUtils.toString(entityform); setHeader(httpPost, headerMap); httpPost.setEntity(entityform); HttpResponse response = http.execute(httpPost); HttpEntity entity = response.getEntity(); // 顯示結果 BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8")); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } if (reader != null) { reader.close(); } } catch(Exception e) { log.error(urlPath,e); } finally { log.info("|" + (System.currentTimeMillis() - stime) + ":ms|" + urlPath + "|" ); } return sb.toString(); } public static String httpPostTool(Map<String, String> nvps, String urlPath, Map headerMap) { long stime = System.currentTimeMillis(); HttpClient http = new DefaultHttpClient(); http.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3600000);//連線時間 http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 3600000);//資料傳輸時間 HttpPost httpPost = new HttpPost(urlPath); UrlEncodedFormEntity entityform; StringBuffer sb = new StringBuffer(); try { List<NameValuePair> params = bulidParams(nvps); entityform = new UrlEncodedFormEntity(params, HTTP.UTF_8); setHeader(httpPost, headerMap); httpPost.setEntity(entityform); HttpResponse response = http.execute(httpPost); HttpEntity entity = response.getEntity(); // 顯示結果 BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8")); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } if (reader != null) { reader.close(); } } catch(Exception e) { log.error(urlPath,e); } finally { log.info("|" + (System.currentTimeMillis() - stime) + ":ms|" + urlPath + "|" ); } return sb.toString(); } public static void setHeader(HttpGet httpGet, Map headerMap) { if (headerMap != null) { Iterator iter = headerMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); httpGet.setHeader(key, val); } } } private static void setHeader(HttpPost httpPost, Map headerMap) { if (headerMap != null) { Iterator iter = headerMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String val = null; if (entry.getValue() != null) { val = String.valueOf(entry.getValue()); httpPost.setHeader(key, val); } } } } public static HttpUriRequest getHttpGetRequest(String url, Map<String, String> headers) { RequestBuilder requestBuilder = RequestBuilder.get().setUri(url); if (headers != null) { for (Map.Entry<String, String> headerEntry : headers.entrySet()) { requestBuilder.addHeader(headerEntry.getKey(), headerEntry.getValue()); } } RequestConfig.Builder requestConfigBuilder = RequestConfig.custom() .setConnectionRequestTimeout(20 * 1000).setSocketTimeout(20 * 1000) .setConnectTimeout(20 * 1000).setCookieSpec(CookieSpecs.BEST_MATCH); requestBuilder.setConfig(requestConfigBuilder.build()); return requestBuilder.build(); } private static List<NameValuePair> bulidParams(Map<String, String> map) throws UnsupportedEncodingException { List<NameValuePair> params = new ArrayList<NameValuePair>(); for(Entry<String, String> entry : map.entrySet()) { params.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } return params; } }
結果資料測試
List<NameValuePair> pairs = new ArrayList<NameValuePair>(); pairs.add(new BasicNameValuePair("sql",sql)); pairs.add(new BasicNameValuePair("type","1")); pairs.add(new BasicNameValuePair("appid","admin_test")); pairs.add(new BasicNameValuePair("schema",schema)); pairs.add(new BasicNameValuePair("catalog","hive")); pairs.add(new BasicNameValuePair("isQuaryAll","true")); Map<String, Object> maps = new HashMap<>(); maps.put("Content-Type", "application/x-www-form-urlencoded"); JSONObject jsonObject = HttpUtils.httpPostTool(pairs, url, maps, 30 * 30 * 1000, 30 * 30 * 1000); return jsonObject;