本帖最后由 我是楠楠 于 2018-5-17 15:13 编辑
HttpUtils.java中有两个公共的静态方法,一个是URLPost,另一个是URLGet,一目了然,前者是提供POST方式提交数据的,后者是提供GET方式提交数据的。其中所需要传送的数据以地图的方式传入,剩下的工作就交给我这个HttpUtils吧!当然如果的Http服务器端对所提交的数据的编码有要求的话,也没问题,你可以传入UTF-8或者GBK,当然大家还可自行增加 import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; / ** * HTTP工具类 * * @李作洋 * * / 公共类HttpUtils { private static Log log = LogFactory.getLog(HttpUtils.class); / ** *定义编码格式UTF-8 * / public static final String URL_PARAM_DECODECHARSET_UTF8 =“UTF-8”; / ** *定义编码格式GBK * / public static final String URL_PARAM_DECODECHARSET_GBK =“GBK”; private static final String URL_PARAM_CONNECT_FLAG =“&”; private static final String EMPTY =“”; private static MultiThreadedHttpConnectionManager connectionManager = null; private static int connectionTimeOut = 25000; private static int socketTimeOut = 25000; private static int maxConnectionPerHost = 20; private static int maxTotalConnections = 20; 私有静态HttpClient客户端; 静态的{ connectionManager = new MultiThreadedHttpConnectionManager(); 。connectionManager.getParams()setConnectionTimeout(connectionTimeOut); 。connectionManager.getParams()setSoTimeout(了socketTimeout); connectionManager.getParams()setDefaultMaxConnectionsPerHost(maxConnectionPerHost)。 connectionManager.getParams()setMaxTotalConnections(maxTotalConnections)。 client = new HttpClient(connectionManager); } / ** * POST方式提交数据 * @参数网址 *待请求的网址 * @参数params *要提交的数据 * @param enc *编码 * @返回 *响应结果 * @抛出IOException * IO异常 * / public static String URLPost(String url,Map <String,String> params,String enc){ 字符串响应= EMPTY; PostMethod postMethod = null; 尝试{ postMethod = new PostMethod(url); postMethod.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded; charset =”+ enc); //将表单的值放入的PostMethod中 Set <String> keySet = params.keySet(); for(String key:keySet){ String value = params.get(key); postMethod.addParameter(key,value); } //执行的PostMethod int statusCode = client.executeMethod(postMethod); if(statusCode == HttpStatus.SC_OK){ response = postMethod.getResponseBodyAsString(); }其他{ log.error(“响应状态码=”+ postMethod.getStatusCode()); } } catch(HttpException e){ log.error(“发生致命的异常,可能是协议不对或者返回的内容有问题”,e); e.printStackTrace(); } catch(IOException e){ log.error(“发生网络异常”,e); e.printStackTrace(); }最后{ if(postMethod!= null){ postMethod.releaseConnection(); postMethod = null; } } 回复回复; } / ** * GET方式提交数据 * @参数网址 *待请求的网址 * @参数params *要提交的数据 * @param enc *编码 * @返回 *响应结果 * @抛出IOException * IO异常 * / public static String URLGet(String url,Map <String,String> params,String enc){ 字符串响应= EMPTY; GetMethod getMethod = null; StringBuffer strtTotalURL = new StringBuffer(EMPTY); if(strtTotalURL.indexOf(“?”)== -1){ strtTotalURL.append(url).append(“?”)。append(getUrl(params,enc)); } else { strtTotalURL.append(url).append(“&”)。append(getUrl(params,enc)); } log.debug(“GET请求URL = \ n”+ strtTotalURL.toString()); 尝试{ getMethod = new GetMethod(strtTotalURL.toString()); getMethod.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded; charset =”+ enc); //执行getMethod int statusCode = client.executeMethod(getMethod); if(statusCode == HttpStatus.SC_OK){ response = getMethod.getResponseBodyAsString(); }其他{ log.debug(“响应状态码=”+ getMethod.getStatusCode()); } } catch(HttpException e){ log.error(“发生致命的异常,可能是协议不对或者返回的内容有问题”,e); e.printStackTrace(); } catch(IOException e){ log.error(“发生网络异常”,e); e.printStackTrace(); }最后{ if(getMethod!= null){ getMethod.releaseConnection(); getMethod = null; } } 回复回复; } / ** *据地图生成URL字符串 * @param地图 *地图 * @param valueEnc *网址编码 * @返回 *网址 * / private static String getUrl(Map <String,String> map,String valueEnc){ if(null == map || map.keySet()。size()== 0){ 返回(EMPTY); } StringBuffer url = new StringBuffer(); 设置<String> keys = map.keySet(); for(Iterator <String> it = keys.iterator(); it.hasNext();){ String key = it.next(); if(map.containsKey(key)){ String val = map.get(key); String str = val!= null?val:EMPTY; 尝试{ str = URLEncoder.encode(str,valueEnc); } catch(UnsupportedEncodingException e){ e.printStackTrace(); } url.append(键).append( “=”)附加(STR).append(URL_PARAM_CONNECT_FLAG)。 } } String strURL = EMPTY; strURL = url.toString(); if(URL_PARAM_CONNECT_FLAG.equals(EMPTY + strURL.charAt(strURL.length() - 1))){ strURL = strURL.substring(0,strURL.length() - 1); } 返回(strURL); } } 传智播客·黑马程序员郑州校区地址 河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话0371-56061160 / 61/62 来校路线地铁一号线梧桐街站A口出 |