package cn.com.lzt.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.Charset; import java.util.Map; import java.util.Vector; /** * 发送Http请求 * * @author 刘鹏 * */ public class HttpRequester { private String defaultContentEncoding; private int timeOut; public HttpRequester() { defaultContentEncoding = Charset.defaultCharset().name(); timeOut = 5; } /** * 发送GET请求 * * @param urlString * URL地址 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString) throws IOException { return send(urlString, "GET", null, null); } /** * 发送GET请求 * * @param urlString * URL地址 * @param params * 参数集合 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString, Map params) throws IOException { return send(urlString, "GET", params, null); } /** * 发送GET请求 * * @param urlString * URL地址 * @param params * 参数集合 * @param propertys * 请求属性 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString, Map params, Map propertys) throws IOException { return send(urlString, "GET", params, propertys); } /** * 发送POST请求 * * @param urlString * URL地址 * @return 响应对象 * @throws IOException */ public HttpRespons sendPost(String urlString) throws IOException { return send(urlString, "POST", null, null); } /** * 发送POST请求 * * @param urlString * URL地址 * @param params * 参数集合 * @return 响应对象 * @throws IOException */ public HttpRespons sendPost(String urlString, Map params) throws IOException { return send(urlString, "POST", params, null); } /** * 发送POST请求 * * @param urlString * URL地址 * @param params * 参数集合 * @param propertys * 请求属性 * @return 响应对象 * @throws IOException */ public HttpRespons sendPost(String urlString, Map params, Map propertys) throws IOException { return send(urlString, "POST", params, propertys); } public HttpRespons sendPost2SCF(String urlString, String parameters) throws IOException { HttpURLConnection urlConnection = null; URL url = new URL(urlString); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(timeOut); urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setRequestProperty("Content-Type", "text/xml"); urlConnection.getOutputStream().write(parameters.getBytes()); urlConnection.getOutputStream().flush(); urlConnection.getOutputStream().close(); return makeContent(urlString, urlConnection); } public HttpRespons sendPost2Spring(String urlString, String parameters) throws IOException { HttpURLConnection urlConnection = null; URL url = new URL(urlString); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(timeOut); urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setRequestProperty("Content-Type", "'application/json;charset=UTF-8"); urlConnection.getOutputStream().write(parameters.getBytes()); urlConnection.getOutputStream().flush(); urlConnection.getOutputStream().close(); return makeContent(urlString, urlConnection); } /** * 发送HTTP请求 * * @param urlString * @return 响映对象 * @throws IOException */ private HttpRespons send(String urlString, String method, Map parameters, Map propertys) throws IOException { HttpURLConnection urlConnection = null; if (method.equalsIgnoreCase("GET") && parameters != null) { StringBuffer param = new StringBuffer(); int i = 0; for (String key : parameters.keySet()) { if (i == 0) { param.append("?"); } else { param.append("&"); } param.append(key).append("=").append(parameters.get(key)); i++; } urlString += param; } URL url = new URL(urlString); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(timeOut); urlConnection.setRequestMethod(method); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setRequestProperty("Content-Type", "text/plain;charset=UTF-8"); if (propertys != null) { for (String key : propertys.keySet()) { urlConnection.addRequestProperty(key, propertys.get(key)); } } if (method.equalsIgnoreCase("POST") && parameters != null) { // urlConnection.setRequestProperty("Content-Type", "text/xml"); StringBuffer param = new StringBuffer(); for (String key : parameters.keySet()) { // param.append(parameters.get(key)); param.append("&"); param.append(key).append("=").append(parameters.get(key)); } urlConnection.getOutputStream().write(param.toString().getBytes()); urlConnection.getOutputStream().flush(); urlConnection.getOutputStream().close(); } return makeContent(urlString, urlConnection); } /** * 得到响应对象 * * @param urlConnection * @return 响应对象 * @throws IOException */ private HttpRespons makeContent(String urlString, HttpURLConnection urlConnection) throws IOException { HttpRespons httpResponser = new HttpRespons(); try { InputStream in = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(in)); httpResponser.contentCollection = new Vector(); StringBuffer temp = new StringBuffer(); String line = bufferedReader.readLine(); while (line != null) { httpResponser.contentCollection.add(line); temp.append(line).append("\r\n"); line = bufferedReader.readLine(); } bufferedReader.close(); String ecod = urlConnection.getContentEncoding(); if (ecod == null) { ecod = defaultContentEncoding; } httpResponser.urlString = urlString; httpResponser.defaultPort = urlConnection.getURL().getDefaultPort(); httpResponser.file = urlConnection.getURL().getFile(); httpResponser.host = urlConnection.getURL().getHost(); httpResponser.path = urlConnection.getURL().getPath(); httpResponser.port = urlConnection.getURL().getPort(); httpResponser.protocol = urlConnection.getURL().getProtocol(); httpResponser.query = urlConnection.getURL().getQuery(); httpResponser.ref = urlConnection.getURL().getRef(); httpResponser.userInfo = urlConnection.getURL().getUserInfo(); httpResponser.content = new String(temp.toString().getBytes(), ecod); httpResponser.contentEncoding = ecod; httpResponser.code = urlConnection.getResponseCode(); httpResponser.message = urlConnection.getResponseMessage(); httpResponser.contentType = urlConnection.getContentType(); httpResponser.method = urlConnection.getRequestMethod(); httpResponser.connectTimeout = urlConnection.getConnectTimeout(); httpResponser.readTimeout = urlConnection.getReadTimeout(); return httpResponser; } catch (IOException e) { System.out.print(e.getMessage()); throw e; } finally { if (urlConnection != null) { urlConnection.disconnect(); } } } /** * 发送HttpPost请求 * * @param strURL * 服务地址 * @param params * json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号
* @return 成功:返回json字符串
*/ public static HttpRespons post(String strURL, String params) throws Exception{ HttpRespons httpResponser = new HttpRespons(); URL url = new URL(strURL);// 创建连接 HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestMethod("POST"); // 设置请求方式 connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式 connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式 connection.connect(); OutputStreamWriter out = new OutputStreamWriter( connection.getOutputStream(), "UTF-8"); // utf-8编码 out.append(params); out.flush(); out.close(); // 读取响应 InputStream is = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(is)); httpResponser.contentCollection = new Vector(); StringBuffer temp = new StringBuffer(); String line = bufferedReader.readLine(); while (line != null) { httpResponser.contentCollection.add(line); temp.append(line).append("\r\n"); line = bufferedReader.readLine(); } bufferedReader.close(); httpResponser.urlString = strURL; httpResponser.defaultPort = connection.getURL().getDefaultPort(); httpResponser.file = connection.getURL().getFile(); httpResponser.host = connection.getURL().getHost(); httpResponser.path = connection.getURL().getPath(); httpResponser.port = connection.getURL().getPort(); httpResponser.protocol = connection.getURL().getProtocol(); httpResponser.query = connection.getURL().getQuery(); httpResponser.ref = connection.getURL().getRef(); httpResponser.userInfo = connection.getURL().getUserInfo(); httpResponser.content = new String(temp.toString().getBytes(), "UTF-8"); httpResponser.contentEncoding = "UTF-8"; httpResponser.code = connection.getResponseCode(); httpResponser.message = connection.getResponseMessage(); httpResponser.contentType = connection.getContentType(); httpResponser.method = connection.getRequestMethod(); httpResponser.connectTimeout = connection.getConnectTimeout(); httpResponser.readTimeout = connection.getReadTimeout(); return httpResponser; } /** * 默认的响应字符集 */ public String getDefaultContentEncoding() { return defaultContentEncoding; } /** * 设置默认的响应字符集 */ public void setDefaultContentEncoding(String defaultContentEncoding) { this.defaultContentEncoding = defaultContentEncoding; } /** * 默认的连接超时秒数 */ public int getTimeOut() { return timeOut; } /** * 设置默认的超时秒数 */ public void setTimeOut(int timeOut) { this.timeOut = timeOut; } }