|  | @ -0,0 +1,299 @@
 | 
	
		
			
				|  |  | package com.yihu.hos.http;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import org.apache.commons.logging.Log;
 | 
	
		
			
				|  |  | import org.apache.commons.logging.LogFactory;
 | 
	
		
			
				|  |  | import org.apache.http.Consts;
 | 
	
		
			
				|  |  | import org.apache.http.HttpEntity;
 | 
	
		
			
				|  |  | import org.apache.http.NameValuePair;
 | 
	
		
			
				|  |  | import org.apache.http.auth.AuthScope;
 | 
	
		
			
				|  |  | import org.apache.http.client.CredentialsProvider;
 | 
	
		
			
				|  |  | import org.apache.http.client.entity.UrlEncodedFormEntity;
 | 
	
		
			
				|  |  | import org.apache.http.client.methods.*;
 | 
	
		
			
				|  |  | import org.apache.http.client.protocol.HttpClientContext;
 | 
	
		
			
				|  |  | import org.apache.http.entity.ContentType;
 | 
	
		
			
				|  |  | import org.apache.http.entity.FileEntity;
 | 
	
		
			
				|  |  | import org.apache.http.impl.client.BasicCredentialsProvider;
 | 
	
		
			
				|  |  | import org.apache.http.impl.client.CloseableHttpClient;
 | 
	
		
			
				|  |  | import org.apache.http.message.BasicNameValuePair;
 | 
	
		
			
				|  |  | import org.apache.http.util.EntityUtils;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.io.File;
 | 
	
		
			
				|  |  | import java.io.IOException;
 | 
	
		
			
				|  |  | import java.io.UnsupportedEncodingException;
 | 
	
		
			
				|  |  | import java.net.MalformedURLException;
 | 
	
		
			
				|  |  | import java.net.URL;
 | 
	
		
			
				|  |  | import java.net.URLEncoder;
 | 
	
		
			
				|  |  | import java.util.ArrayList;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * @created Airhead 2016/8/24.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | public class HTTPClientDefaultImpl implements HTTPClient {
 | 
	
		
			
				|  |  |     private static final Log log = LogFactory.getLog(HTTPClientDefaultImpl.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     protected CloseableHttpClient httpClient;
 | 
	
		
			
				|  |  |     protected HttpClientContext httpClientContext;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     HTTPClientDefaultImpl(CloseableHttpClient httpClient, CredentialsProvider credentialsProvider) {
 | 
	
		
			
				|  |  |         this.httpClient = httpClient;
 | 
	
		
			
				|  |  |         if (credentialsProvider != null) {
 | 
	
		
			
				|  |  |             this.httpClientContext = HttpClientContext.create();
 | 
	
		
			
				|  |  |             httpClientContext.setCredentialsProvider(credentialsProvider);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse get(String url) {
 | 
	
		
			
				|  |  |         return get(url, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse get(String url, Map<String, String> params) {
 | 
	
		
			
				|  |  |         return get(url, params, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         CloseableHttpResponse response;
 | 
	
		
			
				|  |  |         HttpEntity entity = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             HttpGet httpGet = new HttpGet(formatURL(url, params));
 | 
	
		
			
				|  |  |             authenticate(url, httpClientContext);
 | 
	
		
			
				|  |  |             addHeads(httpGet, headers);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             response = httpClient.execute(httpGet, httpClientContext);
 | 
	
		
			
				|  |  |             entity = response.getEntity();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
 | 
	
		
			
				|  |  |         } catch (IOException ex) {
 | 
	
		
			
				|  |  |             log.error(ex.getMessage());
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 EntityUtils.consume(entity);
 | 
	
		
			
				|  |  |             } catch (IOException ex) {
 | 
	
		
			
				|  |  |                 log.error(ex.getMessage());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return new HTTPResponse(500, "");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse post(String url) {
 | 
	
		
			
				|  |  |         return post(url, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse post(String url, Map<String, String> params) {
 | 
	
		
			
				|  |  |         return post(url, params, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         CloseableHttpResponse response;
 | 
	
		
			
				|  |  |         HttpEntity entity = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             HttpPost httpPost = new HttpPost(url);
 | 
	
		
			
				|  |  |             authenticate(url, httpClientContext);
 | 
	
		
			
				|  |  |             addHeads(httpPost, headers);
 | 
	
		
			
				|  |  |             setEntity(httpPost, params);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             response = httpClient.execute(httpPost, httpClientContext);
 | 
	
		
			
				|  |  |             entity = response.getEntity();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
 | 
	
		
			
				|  |  |         } catch (IOException ex) {
 | 
	
		
			
				|  |  |             log.error(ex.getMessage());
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 EntityUtils.consume(entity);
 | 
	
		
			
				|  |  |             } catch (IOException ex) {
 | 
	
		
			
				|  |  |                 log.error(ex.getMessage());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return new HTTPResponse(500, "");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse postFile(String url, String path) {
 | 
	
		
			
				|  |  |         return postFile(url, path, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse postFile(String url, String path, Map<String, String> params) {
 | 
	
		
			
				|  |  |         return postFile(url, path, params, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         CloseableHttpResponse response;
 | 
	
		
			
				|  |  |         HttpEntity entity = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             HttpPost httpPost = new HttpPost(url);
 | 
	
		
			
				|  |  |             authenticate(url, httpClientContext);
 | 
	
		
			
				|  |  |             addHeads(httpPost, headers);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             File file = new File(path);
 | 
	
		
			
				|  |  |             FileEntity fileEntity = new FileEntity(file, ContentType.create("text/plain", "UTF-8"));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             httpPost.setEntity(fileEntity);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             response = httpClient.execute(httpPost, httpClientContext);
 | 
	
		
			
				|  |  |             entity = response.getEntity();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
 | 
	
		
			
				|  |  |         } catch (IOException ex) {
 | 
	
		
			
				|  |  |             log.error(ex.getMessage());
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 EntityUtils.consume(entity);
 | 
	
		
			
				|  |  |             } catch (IOException ex) {
 | 
	
		
			
				|  |  |                 log.error(ex.getMessage());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return new HTTPResponse(500, "");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse put(String url) {
 | 
	
		
			
				|  |  |         return put(url, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse put(String url, Map<String, String> params) {
 | 
	
		
			
				|  |  |         return put(url, params, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         CloseableHttpResponse response;
 | 
	
		
			
				|  |  |         HttpEntity entity = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             HttpPut httpPut = new HttpPut(url);
 | 
	
		
			
				|  |  |             authenticate(url, httpClientContext);
 | 
	
		
			
				|  |  |             addHeads(httpPut, headers);
 | 
	
		
			
				|  |  |             setEntity(httpPut, params);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             response = httpClient.execute(httpPut, httpClientContext);
 | 
	
		
			
				|  |  |             entity = response.getEntity();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
 | 
	
		
			
				|  |  |         } catch (IOException ex) {
 | 
	
		
			
				|  |  |             log.error(ex.getMessage());
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 EntityUtils.consume(entity);
 | 
	
		
			
				|  |  |             } catch (IOException ex) {
 | 
	
		
			
				|  |  |                 log.error(ex.getMessage());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return new HTTPResponse(500, "");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse delete(String url) {
 | 
	
		
			
				|  |  |         return delete(url, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse delete(String url, Map<String, String> params) {
 | 
	
		
			
				|  |  |         return delete(url, params, null);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         CloseableHttpResponse response;
 | 
	
		
			
				|  |  |         HttpEntity entity = null;
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             HttpDelete httpDelete = new HttpDelete(formatURL(url, params));
 | 
	
		
			
				|  |  |             authenticate(url, httpClientContext);
 | 
	
		
			
				|  |  |             addHeads(httpDelete, headers);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             response = httpClient.execute(httpDelete, httpClientContext);
 | 
	
		
			
				|  |  |             entity = response.getEntity();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return new HTTPResponse(response.getStatusLine().getStatusCode(), EntityUtils.toString(entity));
 | 
	
		
			
				|  |  |         } catch (IOException ex) {
 | 
	
		
			
				|  |  |             log.error(ex.getMessage());
 | 
	
		
			
				|  |  |         } finally {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 EntityUtils.consume(entity);
 | 
	
		
			
				|  |  |             } catch (IOException ex) {
 | 
	
		
			
				|  |  |                 log.error(ex.getMessage());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return new HTTPResponse(500, "");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         if (method.equals(POST)) {
 | 
	
		
			
				|  |  |             return post(url, params, headers);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (method.equals(GET)) {
 | 
	
		
			
				|  |  |             return get(url, params, headers);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (method.equals(PUT)) {
 | 
	
		
			
				|  |  |             return put(url, params, headers);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (method.equals(DELETE)) {
 | 
	
		
			
				|  |  |             return delete(url, params, headers);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return get(url, params, headers);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void addHeads(HttpRequestBase httpRequestBase, Map<String, String> headers) {
 | 
	
		
			
				|  |  |         if (headers == null) {
 | 
	
		
			
				|  |  |             return;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         headers.forEach(httpRequestBase::addHeader);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private String formatURL(String url, Map<String, String> params) {
 | 
	
		
			
				|  |  |         if (params == null) {
 | 
	
		
			
				|  |  |             return url;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  |         final String[] query = {""};
 | 
	
		
			
				|  |  |         params.forEach((name, value) -> {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 query[0] += "&" + name + URLEncoder.encode(value, "UTF-8");
 | 
	
		
			
				|  |  |             } catch (UnsupportedEncodingException e) {
 | 
	
		
			
				|  |  |                 throw new RuntimeException("encode url ");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (url.contains("?")) {
 | 
	
		
			
				|  |  |             return url + query[0];
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return url + "?" + query[0].substring(1);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void authenticate(String url, HttpClientContext httpClientContext) throws MalformedURLException {
 | 
	
		
			
				|  |  |         URL r = new URL(url);
 | 
	
		
			
				|  |  |         String userInfo = r.getUserInfo();
 | 
	
		
			
				|  |  |         if (userInfo == null) {
 | 
	
		
			
				|  |  |             return;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String[] user = userInfo.split(":");
 | 
	
		
			
				|  |  |         String host = r.getHost();
 | 
	
		
			
				|  |  |         int port = r.getPort();
 | 
	
		
			
				|  |  |         CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
 | 
	
		
			
				|  |  |         credentialsProvider.setCredentials(new AuthScope(host, port),
 | 
	
		
			
				|  |  |                 new org.apache.http.auth.UsernamePasswordCredentials(user[0], user[1]));
 | 
	
		
			
				|  |  |         if (httpClientContext == null) {
 | 
	
		
			
				|  |  |             httpClientContext = HttpClientContext.create();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         httpClientContext.setCredentialsProvider(credentialsProvider);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void setEntity(HttpEntityEnclosingRequestBase httpEntityEnclosingRequestBase, Map<String, String> params) {
 | 
	
		
			
				|  |  |         if (params == null) {
 | 
	
		
			
				|  |  |             return;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<NameValuePair> nameValuePairs = new ArrayList<>();
 | 
	
		
			
				|  |  |         params.forEach((name, value) -> nameValuePairs.add(new BasicNameValuePair(name, value)));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
 | 
	
		
			
				|  |  |         httpEntityEnclosingRequestBase.setEntity(postEntity);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |