基于HttpClient的java后台访问URL
2015-10-17 20:59
567 查看
写支付相关东西遇到需要在后台访问url,搜了搜找到一篇不错的文章,收藏下来以留后用。
httpUtils.java中有两个公共的静态方法,一个是URLPost,另一个是URLGet,一目了然,前者是提供POST方式提交数据的,后者是提供GET方式提交数据的。其中所需要传送的数据以Map的方式传入,剩下的工作就交给我这个HttpUtils吧!当然如果Http服务器端对所提交的数据的编码有要求的话,也没问题,你可以传入UTF-8或者GBK,当然大家还可自行增加。
httpUtils.java中有两个公共的静态方法,一个是URLPost,另一个是URLGet,一目了然,前者是提供POST方式提交数据的,后者是提供GET方式提交数据的。其中所需要传送的数据以Map的方式传入,剩下的工作就交给我这个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工具类 * * @author lixiangyang * */ public class 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; private static HttpClient client; static{ connectionManager = new MultiThreadedHttpConnectionManager(); connectionManager.getParams().setConnectionTimeout(connectionTimeOut); connectionManager.getParams().setSoTimeout(socketTimeOut); connectionManager.getParams().setDefaultMaxConnectionsPerHost(maxConnectionPerHost); connectionManager.getParams().setMaxTotalConnections(maxTotalConnections); client = new HttpClient(connectionManager); } /** * POST方式提交数据 * @param url * 待请求的URL * @param params * 要提交的数据 * @param enc * 编码 * @return * 响应结果 * @throws IOException * IO异常 */ public static String URLPost(String url, Map<String, String> params, String enc){ String response = EMPTY; PostMethod postMethod = null; try { 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(); }else{ log.error("响应状态码 = " + postMethod.getStatusCode()); } }catch(HttpException e){ log.error("发生致命的异常,可能是协议不对或者返回的内容有问题", e); e.printStackTrace(); }catch(IOException e){ log.error("发生网络异常", e); e.printStackTrace(); }finally{ if(postMethod != null){ postMethod.releaseConnection(); postMethod = null; } } return response; } /** * GET方式提交数据 * @param url * 待请求的URL * @param params * 要提交的数据 * @param enc * 编码 * @return * 响应结果 * @throws IOException * IO异常 */ public static String URLGet(String url, Map<String, String> params, String enc){ String response = 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()); try { 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(); }else{ log.debug("响应状态码 = " + getMethod.getStatusCode()); } }catch(HttpException e){ log.error("发生致命的异常,可能是协议不对或者返回的内容有问题", e); e.printStackTrace(); }catch(IOException e){ log.error("发生网络异常", e); e.printStackTrace(); }finally{ if(getMethod != null){ getMethod.releaseConnection(); getMethod = null; } } return response; } /** * 据Map生成URL字符串 * @param map * Map * @param valueEnc * URL编码 * @return * URL */ private static String getUrl(Map<String, String> map, String valueEnc) { if (null == map || map.keySet().size() == 0) { return (EMPTY); } StringBuffer url = new StringBuffer(); Set<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; try { str = URLEncoder.encode(str, valueEnc); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } url.append(key).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); } return (strURL); } }
相关文章推荐
- qt与java实现简单的网络通信
- Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
- 《TCP/IP详解 卷一》读书笔记-----动态路由协议
- UDP TCP区别
- JAVA基础学习之Http(含JSON)网络编程
- http-web基础
- 网络抓包教程
- SQLCONNECTION使用HTTP通信协议和中间件连接
- BroadcastReceiver之动态注册监听网络状态变化
- ASP.NET WebAPI 06 HttpMessageHandler管道
- http网站上传文件大小问题【没测试过】
- TCP/IP协议族-----10、搬家IP
- C# 通过豆瓣网络编程API获取图书信息
- C++异常安全 http://www.cnblogs.com/qinfengxiaoyue/p/3713762.html
- TCPl建立连接的三次握手机制分析
- 如何:异常安全模型 https://msdn.microsoft.com/zh-cn/library/hh279653(v=vs.110)
- 常见网络命令的使用
- 计算机网络协议
- Volley请求HTTPS,及其实现post,delete,get,put,上传下载图片。demo
- iOS TCPSocket讲解