package com.hlzt.wx.util.http; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import com.hlzt.wx.util.token.GlobalAccessTokenUtils; public class HttpClientConnectionManager { // http客户端 private static DefaultHttpClient httpclient=new DefaultHttpClient(); public static DefaultHttpClient getHttpclient() { return httpclient; } public static void setHttpclient(DefaultHttpClient httpclient) { HttpClientConnectionManager.httpclient = httpclient; } /** * 获取SSL验证的HttpClient * @param httpClient * @return *//* public static HttpClient getSSLInstance(HttpClient httpClient){ ClientConnectionManager ccm = httpClient.getConnectionManager(); SchemeRegistry sr = ccm.getSchemeRegistry(); sr.register(new Scheme("https", MySSLSocketFactory.getInstance(), 443)); httpClient = new DefaultHttpClient(ccm, httpClient.getParams()); return httpClient; }*/ /** * 模拟浏览器post提交 * @param url * @return */ public static HttpPost getPostMethod(String url) { HttpPost pmethod = new HttpPost(url); // 设置响应头信息 pmethod.addHeader("Connection", "keep-alive"); pmethod.addHeader("Accept", "*/*"); pmethod.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); pmethod.addHeader("Host", "mp.weixin.qq.com"); pmethod.addHeader("X-Requested-With", "XMLHttpRequest"); pmethod.addHeader("Cache-Control", "max-age=0"); pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); return pmethod; } /** * 模拟浏览器GET提交 * @param url * @return */ public static HttpGet getGetMethod(String url) { HttpGet pmethod = new HttpGet(url); // 设置响应头信息 pmethod.addHeader("Connection", "keep-alive"); pmethod.addHeader("Cache-Control", "max-age=0"); pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); pmethod.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8"); return pmethod; } }
package com.hlzt.wx.util.http; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONObject; import org.apache.commons.collections4.map.LinkedMap; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpException; 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.entity.EntityBuilder; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 通过HttpClient访问,网站的url * @author zhouhf * @version 1.0 2014年9月24日 * @since 1.6 */ public final class WxHttpClientUtils { /** * 日志对象 */ protected static Logger logger = LoggerFactory.getLogger(WxHttpClientUtils.class); // http客户端 private static DefaultHttpClient httpclient=new DefaultHttpClient(); public static DefaultHttpClient getHttpclient() { return httpclient; } public static void setHttpclient(DefaultHttpClient httpclient) { WxHttpClientUtils.httpclient = httpclient; } /** * 尝试请求指定链接是否正常 * @param client 客户端对象 * @param url 请求的链接 * @throws HttpException * @throws IOException */ public static boolean testUrl(String url){ return testUrl(createHttpClient(),url); } /** * 尝试请求指定链接是否正常 * @param client 客户端对象 * @param url 请求的链接 * @throws HttpException * @throws IOException */ public static boolean testUrl(HttpClient client,String url){ HttpGet httpGet=new HttpGet(url); httpGet.addHeader("Content-Type", "text/html;charset=UTF-8"); int statusCode = 0; try { HttpResponse response = client.execute(httpGet); statusCode = response.getStatusLine().getStatusCode(); } catch (Exception e) { logger.error("HttpClient请求异常",e); } finally{ httpGet.abort(); } if(HttpStatus.SC_OK != statusCode){ return false; } return true; } /** * 通过GET方法请求服务器文本数据 * @param url 地址 * @param parameters 参数 * @return 结果文本 * @throws HttpException * @throws IOException */ public static String httpGetText(String url,LinkedMap<String,Object> parameters) throws HttpException, IOException{ return httpGetText(createHttpClient(),url,parameters); } /** * 通过GET方法请求服务器文本数据 * @param client http客户端 * @param url 地址 * @param parameters 参数 * @return 结果文本 * @throws HttpException * @throws IOException */ public static String httpGetText(HttpClient client,String url,LinkedMap<String,Object> parameters) throws HttpException, IOException{ if(parameters != null && parameters.size() > 0){ List<NameValuePair> params = new ArrayList<NameValuePair>(); for(int i=0,len = parameters.size(); i < len; i++){ Object v = parameters.getValue(i); if(v == null) continue; String value = v.toString(); String key = parameters.get(i); params.add(new BasicNameValuePair(key,value)); } if(url.indexOf("?") > -1){ url += "&" + URLEncodedUtils.format(params, "UTF-8"); }else{ url += "?" + URLEncodedUtils.format(params, "UTF-8"); } } HttpGet httpGet=new HttpGet(url); httpGet.addHeader("Content-Type", "text/html;charset=UTF-8"); try{ HttpResponse response = client.execute(httpGet); InputStream is = response.getEntity().getContent(); ByteArrayOutputStream os = new ByteArrayOutputStream(); IOUtils.copy(is,os); return new String(os.toByteArray(),"UTF-8"); }finally{ httpGet.abort(); } } /** * 通过POST方式向服务器发送数据 * @param client http客户端 * @param url 地址 * @param parameters 参数集 * @param attachs 附件列表 * @return 返回结果 * @throws HttpException * @throws IOException */ public static String httpPostUpload(HttpClient client,String url,LinkedMap<String,Object> parameters,LinkedMap<String,File> attachs) throws HttpException, IOException{ HttpPost httpPost=new HttpPost(url); HttpEntity entity = null; if(attachs != null && attachs.size() > 0){ MultipartEntityBuilder multipartBuilder = MultipartEntityBuilder.create(); multipartBuilder.setCharset(Charset.forName("UTF-8")); for(int i = 0,len = attachs.size(); i< len; i++){ multipartBuilder.addBinaryBody(attachs.get(i), attachs.getValue(i)); } if(parameters != null && parameters.size() > 0){ for(int i=0,len = parameters.size(); i < len; i++){ Object v = parameters.getValue(i); if(v == null) continue; String value = v.toString(); String key = parameters.get(i); multipartBuilder.addTextBody(key, value); } } entity = multipartBuilder.build(); }else if(parameters != null && parameters.size() > 0){ List<NameValuePair> params = new ArrayList<NameValuePair>(); for(int i=0,len = parameters.size(); i < len; i++){ Object v = parameters.getValue(i); if(v == null) continue; String value = v.toString(); String key = parameters.get(i); params.add(new BasicNameValuePair(key, value)); } EntityBuilder builder = EntityBuilder.create(); builder.setContentEncoding("UTF-8"); builder.setParameters(params); entity = builder.build(); } if(entity != null) httpPost.setEntity(entity); try { HttpResponse response = client.execute(httpPost); return EntityUtils.toString(response.getEntity(), "GBK"); }finally{ httpPost.abort(); } } /** * 通过POST方式向服务器发送数据 * @param url 地址 * @param parameters 参数集 * @param attachs 附件列表 * @return 返回结果 * @throws HttpException * @throws IOException */ public static String httpPostUpload(String url,LinkedMap<String,Object> parameters,LinkedMap<String,File> attachs) throws HttpException, IOException{ return httpPostUpload(createHttpClient(),url,parameters,attachs); } /** * 创建httpClient对象 * @return httpClient对象 */ public static HttpClient createHttpClient(){ return HttpClientBuilder.create().build(); } /** * 模拟浏览器post提交 * @param url * @return */ public static HttpPost getPostMethod(String url) { HttpPost pmethod = new HttpPost(url); // 设置响应头信息 pmethod.addHeader("Connection", "keep-alive"); pmethod.addHeader("Accept", "*/*"); pmethod.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); pmethod.addHeader("Host", "mp.weixin.qq.com"); pmethod.addHeader("X-Requested-With", "XMLHttpRequest"); pmethod.addHeader("Cache-Control", "max-age=0"); pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); return pmethod; } /** * 模拟浏览器GET提交 * @param url * @return */ public static HttpGet getGetMethod(String url) { HttpGet pmethod = new HttpGet(url); // 设置响应头信息 pmethod.addHeader("Connection", "keep-alive"); pmethod.addHeader("Cache-Control", "max-age=0"); pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); pmethod.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8"); return pmethod; } /** * get方式模拟浏览器请求 * @param url * @return */ public static String getHttpGetReturnStr(String url) { HttpGet get = getGetMethod(url); String returnStr=null; try { HttpResponse response = getHttpclient().execute(get); returnStr = EntityUtils.toString(response.getEntity(), "utf-8"); } catch (Exception e) { logger.info("################# HttpGet请求出错"); } return returnStr; } /** * post模拟浏览器请求, * @param url * @param entityJson * @return */ public static String getHttpPostReturnStr(String url,String entityJson) { HttpPost httpost = HttpClientConnectionManager.getPostMethod(url); httpost.setEntity(new StringEntity(entityJson, "UTF-8")); String returnStr=null; try { HttpResponse response = getHttpclient().execute(httpost); returnStr = EntityUtils.toString(response.getEntity(), "utf-8"); } catch (Exception e) { logger.info("################# HttpPost请求出错"); } return returnStr; } }