简单封装的httpclient
来源:互联网 发布:武汉网络推广外包 编辑:程序博客网 时间:2024/05/22 14:17
package com.<span style="font-family: Arial, Helvetica, sans-serif;">****</span><span style="font-family: Arial, Helvetica, sans-serif;">.util;</span>import java.io.IOException;import java.io.InputStream;import java.net.SocketTimeoutException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import java.util.List;import javax.net.ssl.SSLContext;import me.***.elog.Log;import me.***.elog.LogFactory;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.HttpClient;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.config.ConnectionConfig;import org.apache.http.conn.ConnectTimeoutException;import org.apache.http.conn.ConnectionPoolTimeoutException;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import com.****.weixin.common.WeixinConstant;public class HttpCallTool {Log log = LogFactory.getLog(HttpCallTool.class); //连接超时时间,默认10秒 private int socketTimeout = 10000; //传输超时时间,默认30秒 private int connectTimeout = 30000; //请求器的配置 private RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();; //HTTP请求器 private HttpClient httpClient; public HttpCallTool(String payType,String tradeType) throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException{ init(payType,tradeType);}public HttpCallTool(){httpClient = HttpClients.createDefault();} @SuppressWarnings("deprecation")private void init(String payType,String tradeType) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException { KeyStore keyStore = KeyStore.getInstance("PKCS12"); InputStream instream =null; SSLContext sslcontext=null; try{ if("weixin".equals(payType)){ if("JSAPI".equals(tradeType)){ instream = HttpCallTool.class.getResourceAsStream(WeixinConstant.getCertLocalPath());//加载本地的证书进行https加密传输 keyStore.load(instream, WeixinConstant.getCertPassword().toCharArray());//设置证书密码 sslcontext = SSLContexts.custom() .loadKeyMaterial(keyStore, WeixinConstant.getCertPassword().toCharArray()) .build(); }else if("APP".equals(tradeType)){ instream = HttpCallTool.class.getResourceAsStream(WeixinConstant.getCertLocalPathForApp());//加载本地的证书进行https加密传输 keyStore.load(instream, WeixinConstant.getCertPasswordForApp().toCharArray());//设置证书密码 sslcontext = SSLContexts.custom() .loadKeyMaterial(keyStore, WeixinConstant.getCertPasswordForApp().toCharArray()) .build(); } } } catch (CertificateException e) { log.error(e.getMessage(),e); } catch (NoSuchAlgorithmException e) { log.error(e.getMessage(),e); } finally { instream.close(); } // Trust own CA and all self-signed certs // Allow TLSv1 protocol only @SuppressWarnings("deprecation")SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( sslcontext, new String[]{"TLSv1"}, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);ConnectionConfig connectionConfig = ConnectionConfig.custom() .setBufferSize(4128) .build(); httpClient = HttpClients.custom().setDefaultConnectionConfig(connectionConfig).setSSLSocketFactory(sslsf).build(); }//发送key - value数据public String callService(List<NameValuePair> list,String url) throws Exception{String responseStr="";try {HttpPost httpPost = new HttpPost(url);UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,HTTP.UTF_8);httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.toString()));httpPost.setEntity(entity);log.info("rpc请求开始:" + httpPost.getURI());HttpResponse response = httpClient.execute(httpPost);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error("通信失败",e);throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送json数据public String callService(String httpJsonMessage,String url) throws Exception{String responseStr="";try {HttpPost httpPost = new HttpPost(url);StringEntity entity = new StringEntity(httpJsonMessage, "utf-8");entity.setContentType("application/json");httpPost.setEntity(entity);log.info("rpc请求开始:" + httpPost.getURI());HttpResponse response = httpClient.execute(httpPost);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error("通信失败",e);throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送json数据 public String callGetService(String url) throws Exception{String responseStr="";try {HttpGet httpGet = new HttpGet(url);HttpResponse response = httpClient.execute(httpGet);if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){HttpEntity entityReponse = response.getEntity();if (entityReponse != null){responseStr=Util.readStream(entityReponse.getContent(), "utf-8");log.info(responseStr);}else{throw new Exception("请求结果为空!");}}} catch (Exception e) {log.error(e.getMessage());throw new Exception("请求超时!");}finally{httpClient.getConnectionManager().shutdown(); }return responseStr;}//发送xml报文数据public String sendPost(String url, String postDataXml) { String result = null; HttpPost httpPost = new HttpPost(url); httpPost.setConfig(requestConfig); //得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别 StringEntity postEntity = new StringEntity(postDataXml, "UTF-8"); httpPost.addHeader("Content-Type", "text/xml"); httpPost.addHeader("Host", "api.mch.weixin.qq.com"); httpPost.setEntity(postEntity); //设置请求器的配置 httpPost.setConfig(requestConfig); log.info("executing request" + httpPost.getRequestLine()); try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, "UTF-8"); } catch (ConnectionPoolTimeoutException e) { log.error("http get throw ConnectionPoolTimeoutException(wait time out)",e); } catch (ConnectTimeoutException e) { log.error("http get throw ConnectTimeoutException",e); } catch (SocketTimeoutException e) { log.error("http get throw SocketTimeoutException",e); } catch (Exception e) { log.error("http get throw Exception",e); } finally { httpPost.abort(); } return result; }}
0 0
- 简单封装的httpclient
- HttpClient 框架的简单封装
- 简单易用的httpclient封装
- 基于HttpClient的Get/Post的http请求简单封装
- HttpClient简单封装及使用
- HttpClient 发送 HTTP、HTTPS 请求的简单封装
- HttpClient 发送 HTTP、HTTPS 请求的简单封装
- HttpClient 发送 HTTP、HTTPS 请求的简单封装
- 封装多线程的HttpClient
- 基于ASIHTTPRequest封装的HttpClient
- HttpClient请求数据的封装
- 封装的HttpClient工具类
- HttpClient的使用和封装
- 对HttpClient方法的封装
- HttpClient的简单使用
- HttpClient的简单使用
- HttpClient的简单应用
- HttpClient的简单使用
- iOS将数组中的内容分拼接成字符串
- 访问者模式
- Linux下xargs命令详解
- HDU 5410 CRB and His Birthday(01背包+完全背包)
- 12C标量子查询中的BUG
- 简单封装的httpclient
- 二叉树遍历求差值绝对值最大值
- C++中虚函数与晚绑定的编译器实现
- MySQL 调优/优化的 100 个建议
- 单例设计模式
- asoundrc配置文件简单介绍
- KM算法板子2
- Hoeffding不等式的证明
- HDU 1032.The 3n + 1 problem【注意细节】【估计数据不强】【8月21】