package com.jqmobile.core.http2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import javax.servlet.http.HttpServletRequest; import com.jqmobile.core.utils.json.JSONConvertor2; import com.jqmobile.core.utils.json.JSONObject; /** * <p>HTTP 请求工具类</p> * <p>遵从久其移动《客户端通讯协议》 * <p>Copyright: 版权所有 (c) 2002 - 2015<br> * Company: 久其</p> * * @author modi * @version 2014年3月17日 */ public class HttpUtils implements HttpInvoke{ public static final String HTTP_CONNTENT_TYPE = "text/html"; public static final String CHARSET = "UTF-8"; private final String serviceAddress; private int timeOut = 10000; public HttpUtils(String url, String uri){ this.serviceAddress = url+uri; } public void setTimeOut(int timeOut) { this.timeOut = timeOut; } public int getTimeOut() { return timeOut; } /** * 获得请求ip * @param request * @return String */ public static String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } @Override public HttpSerializableObject invoke(HttpSerializableObject obj) throws HttpException, Throwable { //create connection HttpURLConnection conn = connect(serviceAddress); conn.setConnectTimeout(timeOut); conn.setReadTimeout(timeOut); conn.connect(); //request PrintWriter out = new PrintWriter(new OutputStreamWriter( conn.getOutputStream(), CHARSET)); JSONObject ret = JSONConvertor2.serializable(obj);//new JSONObject(obj); String requestString = ret.toString(); out.print(requestString); out.flush(); out.close(); //response StringBuilder sResult = new StringBuilder(); int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream httpInput = null; BufferedReader httpReader = null; // 读取数据 httpInput = conn.getInputStream(); httpReader = new BufferedReader(new InputStreamReader( httpInput, CHARSET)); String line = null; while ((line = httpReader.readLine()) != null) { if (sResult.length() > 0) { sResult.append("\n"); } sResult.append(line); } } else { throw new HttpException(HttpException.REQUEST_REFUSE, "请求服务器失败:"+responseCode); } if(null == sResult || "".equals(sResult.toString().trim())){ return null; } JSONObject result = new JSONObject(sResult.toString()); return (HttpSerializableObject)JSONConvertor2.unAutoSerializable(result, HttpSerializableObject.class); } /** * 通过URL建立连接 * @param url * @return * @throws IOException */ public static HttpURLConnection connect(String url) throws IOException { URL _url = null; try { _url = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } HttpURLConnection conn = null; // conn = (HttpURLConnection) _url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setRequestProperty("Content-type", HTTP_CONNTENT_TYPE); conn.setRequestProperty("Charset", CHARSET); // return conn; } }