博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
remote Request
阅读量:6566 次
发布时间:2019-06-24

本文共 15491 字,大约阅读时间需要 51 分钟。

import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.security.GeneralSecurityException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.List;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLException;import javax.net.ssl.SSLSession;import javax.net.ssl.SSLSocket;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.StringUtils;import org.apache.commons.lang3.math.NumberUtils;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;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.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContextBuilder;import org.apache.http.conn.ssl.TrustStrategy;import org.apache.http.conn.ssl.X509HostnameVerifier;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;/** * 服务器端请求服务类 *  * @author Administrator * @date 2018年1月15日 * @version 1.0 */@SuppressWarnings("deprecation")public abstract class RequestService {    /** jackJson 转化工具 **/    private static final ObjectMapper mapper = new ObjectMapper();    /** 连接池配置 **/    private static PoolingHttpClientConnectionManager connMgr;    /** requestConfig **/    private static RequestConfig requestConfig;        /** 日志 **/    private static Logger logger = LoggerFactory.getLogger(RequestService.class);    /** 服务器地址 **/    private static final String HOST_PATH = H5FileUtils.getValueFromProperties("remote.server.host");    /** 连接超时 **/    private static final int CONNECTION_TIMEOUT = NumberUtils.toInt(H5FileUtils.getValueFromProperties("remote.conntection.timeout")) * 1000;        static {          // 设置连接池          connMgr = new PoolingHttpClientConnectionManager();          // 设置连接池大小          connMgr.setMaxTotal(100);          connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());          RequestConfig.Builder configBuilder = RequestConfig.custom();          // 设置连接超时          configBuilder.setConnectTimeout(CONNECTION_TIMEOUT);          // 设置读取超时          configBuilder.setSocketTimeout(CONNECTION_TIMEOUT);          // 设置从连接池获取连接实例的超时          configBuilder.setConnectionRequestTimeout(CONNECTION_TIMEOUT);          // 在提交请求之前 测试连接是否可用          configBuilder.setStaleConnectionCheckEnabled(true);          requestConfig = configBuilder.build();      }        /**     * GET方式请求远端服务器数据     * @param url     * @return     * @throws IOException      * @throws ClientProtocolException      */    @SuppressWarnings("rawtypes")    protected ResponseVO getRemoteReqData(String url){        logger.debug(">>>getRemoteReqData(String url)");        logger.debug("url:" + url);        return this.getRemoteReqData(url, null);    }        /**默认采用不解码形式     * GET方式请求远端服务器数据     * @param url     * @return     * @throws IOException      * @throws ClientProtocolException      */    @SuppressWarnings("rawtypes")    protected ResponseVO getRemoteReqData(String url, String specifyUrl) {        logger.debug(">>>getRemoteReqData(String url, String specifyUrl)");        logger.debug("url:" + url);        logger.debug("specifyUrl:" + specifyUrl);        return this.getRemoteReqData(url, specifyUrl, CommonConstants.DECODE_N);    }        /**     * GET方式请求远端服务器数据     * @param url     * @return ResponseVO     * @throws IOException      * @throws ClientProtocolException      */    @SuppressWarnings("rawtypes")    protected ResponseVO getRemoteReqData(String url, String specifyUrl, String isDecode) {        logger.debug(">>>getRemoteReqData(String url, String specifyUrl, String isDecode)");        logger.debug("url:" + url);        logger.debug("specifyUrl:" + specifyUrl);        logger.debug("isDecode:" + isDecode);        // 开启服务        CloseableHttpClient client = getHttpClients(specifyUrl);                // 主库判断        if(StringUtils.isNotEmpty(specifyUrl)){            url = specifyUrl + url;        }else{            url = getHostUrl() + url;        }        logger.debug("-> getUrl:" + url);        HttpGet get = new HttpGet(url);        ResponseVO respVO = null;        try {        HttpResponse response=client.execute(get);        if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){             HttpEntity entity=response.getEntity();            String returnValue = EntityUtils.toString(entity,CommonConstants.CHARSET_DEFAULT);            // 解码判断            if(StringUtils.equals(isDecode, CommonConstants.DECODE_Y)){                returnValue = URLDecoder.decode(returnValue, CommonConstants.CHARSET_DEFAULT);            }            logger.debug("->getRequest:returnValue from remoteUrl: " + returnValue);            respVO = mapper.readValue(returnValue, ResponseVO.class);        }else if(HttpStatus.SC_NO_CONTENT==response.getStatusLine().getStatusCode()){            respVO = new ResponseVO();            respVO.setResponseCode("-1");            respVO.setResponseMessage("远程连接未能接通!");        }else if(HttpStatus.SC_NOT_FOUND==response.getStatusLine().getStatusCode()){            respVO = new ResponseVO();            respVO.setResponseCode("-1");            respVO.setResponseMessage("远程连接地址未找到!");        }else if(HttpStatus.SC_BAD_REQUEST ==response.getStatusLine().getStatusCode()) {            respVO = new ResponseVO();            respVO.setResponseCode("-1");            respVO.setResponseMessage("远程接口需求数据与本地数据不匹配!");        }        } catch (ClientProtocolException e) {            respVO = new ResponseVO();            respVO.setResponseCode("-1");            respVO.setResponseMessage("远程连接出现错误!");            e.printStackTrace();        } catch (IOException e) {            respVO = new ResponseVO();            respVO.setResponseCode("-1");            respVO.setResponseMessage("远程端口出现错误!");            e.printStackTrace();        }        logger.debug("<<
>>getRemoteReqStream(String url)"); logger.debug("url:" + url); return getRemoteReqStream(url, null); } /** * GET方式请求远端服务器流, * 因返回InputStream输入流,因此一定要try catch,关闭 * @param url * @return InputStream * @throws IOException * @throws ClientProtocolException */ protected InputStream getRemoteReqStream(String url, String specifyUrl) throws ClientProtocolException, IOException{ logger.debug(">>>getRemoteReqStream(String url, String specifyUrl)"); logger.debug("url:" + url); logger.debug("specifyUrl:" + specifyUrl); // 主库判断 if(StringUtils.isNotEmpty(specifyUrl)){ url = specifyUrl + url; }else{ url = getHostUrl() + url; } logger.debug("-> getStreamUrl:" + url); // 开启服务 CloseableHttpClient client = getHttpClients(specifyUrl); HttpGet get=new HttpGet(url); InputStream is = null; HttpResponse response=client.execute(get); if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ HttpEntity entity=response.getEntity(); is = entity.getContent(); } logger.debug("<<
>>postRemoteReqData(String url, HttpEntity entity)"); logger.debug("url:" + url); logger.debug("entity:{}", entity); return postRemoteReqData(url, entity, null); } /** * 默认此方法不采用解码形式 * POST方式请求远端服务器数据 * @param url * @return ResponseVO */ @SuppressWarnings("rawtypes") protected ResponseVO postRemoteReqData(String url, HttpEntity entity, String specifyUrl){ logger.debug(">>>postRemoteReqData(String url, HttpEntity entity)"); logger.debug("url:" + url); logger.debug("entity:{}", entity); logger.debug("specifyUrl:" + specifyUrl); return postRemoteReqData(url, entity, specifyUrl, CommonConstants.DECODE_N); } /** * post请求 * @param rEMOTE_URL_GESTURE_SAVE * @param createParams * @param specifyUrl(指定url) * @return ResponseVO */ @SuppressWarnings({
"rawtypes"}) public ResponseVO postRemoteReqData(String url, HttpEntity entity, String specifyUrl, String isDecode) { logger.debug(">>>postRemoteReqData(String url, HttpEntity entity, String specifyUrl, String isDecode)"); logger.debug("url:" + url); logger.debug("entity:{}", entity); logger.debug("specifyUrl:" + specifyUrl); logger.debug("isDecode:" + isDecode); // 主库判断 if(StringUtils.isNotEmpty(specifyUrl)){ url = specifyUrl + url; } else{ url = getHostUrl() + url; } logger.debug("-> postUrl:" + url); // 开启服务 CloseableHttpClient client = getHttpClients(specifyUrl); //POST的URL HttpPost httpPost = new HttpPost(url); // 返回值 ResponseVO respVO = null; //添加参数 httpPost.setEntity(entity); HttpResponse response; try { response = client.execute(httpPost); if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ String returnValue = EntityUtils.toString(response.getEntity(),CommonConstants.CHARSET_DEFAULT); // 解码判断 if(StringUtils.equals(isDecode, CommonConstants.DECODE_Y)){ returnValue = URLDecoder.decode(returnValue, CommonConstants.CHARSET_DEFAULT); } logger.debug("->getRequest:returnValue from remoteUrl: " + returnValue); respVO = mapper.readValue(returnValue, ResponseVO.class); }else if(HttpStatus.SC_NO_CONTENT==response.getStatusLine().getStatusCode()){ respVO = new ResponseVO(); respVO.setResponseCode("-1"); respVO.setResponseMessage("远程连接未能接通!"); }else if(HttpStatus.SC_NOT_FOUND==response.getStatusLine().getStatusCode()){ respVO = new ResponseVO(); respVO.setResponseCode("-1"); respVO.setResponseMessage("远程连接地址未找到!"); }else if(HttpStatus.SC_BAD_REQUEST ==response.getStatusLine().getStatusCode()) { respVO = new ResponseVO(); respVO.setResponseCode("-1"); respVO.setResponseMessage("远程接口需求数据与本地数据不匹配!"); } } catch (ClientProtocolException e) { respVO = new ResponseVO(); respVO.setResponseCode("-1"); respVO.setResponseMessage("远程连接出现错误!"); e.printStackTrace(); } catch (IOException e) { respVO = new ResponseVO(); respVO.setResponseCode("-1"); respVO.setResponseMessage("远程端口出现错误!"); e.printStackTrace(); } logger.debug("respVO:{}", respVO); logger.debug("<<
>>createParams(String[] names, String[] values)"); logger.debug("names:{}", names.toString()); logger.debug("values:{}", values.toString()); List
paramsList = new ArrayList
(); HttpEntity entity = null; for(int i = 0; i < names.length; i++){ paramsList.add(new BasicNameValuePair(names[i], values[i])); } try{ entity = new UrlEncodedFormEntity(paramsList, CommonConstants.CHARSET_DEFAULT); }catch(UnsupportedEncodingException e){ logger.debug("->UnsupportedEncodingException:", e); } logger.debug("paramsList:{}", paramsList); logger.debug("<<
>> createJsonParams(Object jsonObject)"); logger.debug("jsonObject:{}", jsonObject); StringEntity entity = null; try{ entity = new StringEntity(H5Utils.mapper.writeValueAsString(jsonObject), CommonConstants.CHARSET_DEFAULT); entity.setContentEncoding(CommonConstants.CHARSET_DEFAULT); entity.setContentType("application/json"); } catch (JsonProcessingException e) { logger.debug("->JsonProcessingException:", e); } logger.debug("entity:{}", entity); logger.debug("<<
>>getHostUrl()"); String url = HOST_PATH; logger.debug("url:" + url); logger.debug("<<
>>getHttpClients(String specifyUrl)"); logger.debug("specifyUrl:" + specifyUrl); // https问题 CloseableHttpClient httpClient = null; if(StringUtils.isNotEmpty(specifyUrl) && specifyUrl.indexOf("https:") > 0){ httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); }else{ httpClient = HttpClients.custom().setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); logger.debug("provIp: " + specifyUrl); } logger.debug("<<
convertListToObject(List originalList,Class
class1) { logger.debug(">>>convertListToObject(List originalList,Class
class1)"); logger.debug("originalList:{}", originalList); logger.debug("class1:{}", class1); List
list = null; try{ if(!CollectionUtils.isEmpty(originalList)){ list = new ArrayList(); for(Object obj : originalList){ Object target = class1.newInstance(); BeanUtils.copyProperties(target, obj); list.add(target); } } } catch(Exception e){ e.printStackTrace(); list = null; } logger.debug("<<
class1)"); return list; } /** * 创建SSL安全连接 * * @return */ private static SSLConnectionSocketFactory createSSLConnSocketFactory() { logger.debug(">>>createSSLConnSocketFactory()"); SSLConnectionSocketFactory sslsf = null; try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } @Override public void verify(String host, SSLSocket ssl) throws IOException { } @Override public void verify(String host, X509Certificate cert) throws SSLException { } @Override public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException { } }); } catch (GeneralSecurityException e) { e.printStackTrace(); } logger.debug("sslsf:{}", sslsf); logger.debug("<<

简单的remote Request:

HttpClient client = new DefaultHttpClient();        HttpPost post = new HttpPost(url);         // 请求超时        client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 2000);        post.addHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");        post.setEntity(entity);        try {            client.execute(post);        } catch (ClientProtocolException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }

 

转载于:https://www.cnblogs.com/DennyZhao/p/8880433.html

你可能感兴趣的文章
遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析...
查看>>
简明 MongoDB 入门教程
查看>>
.NET Core 3.0中的数据库驱动框架System.Data
查看>>
北大AI公开课2019 | 雷鸣:人工智能革命与机遇
查看>>
英特尔开源计算机视觉数据标签工具CVAT,加速数据注释
查看>>
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
我设计的网站的分布式架构
查看>>