A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 我是楠楠 于 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口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马