package com.rainet.tiis.network; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.CookieStore; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.params.HttpClientParams; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.util.Log; /** * @project: TIIS * @Title: SimpleClient.java * @Package com.rainet.tiis.network * @Description: HTTP请求factory * @author 杨贵松 * @date 2014-3-18 下午12:39:23 * @version V1.0 */ public class SimpleClient { private static HttpParams httpParams; private static DefaultHttpClient httpClient; private static String JSESSIONID; //定义一个静态的字段,保存sessionID /** * @Title: getHttpClient * @author 杨贵松 * @date 2014-3-18 下午1:11:18 * @Description: 获取HttpClient * @return * @throws Exception * HttpClient 返回 */ public static HttpClient getHttpClient() throws Exception { // 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的) httpParams = new BasicHttpParams(); // 设置连接超时和 Socket 超时,以及 Socket 缓存大小 HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); HttpConnectionParams.setSocketBufferSize(httpParams, 8192); // 设置重定向,缺省为 true HttpClientParams.setRedirecting(httpParams, true); // 设置 user agent String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6"; HttpProtocolParams.setUserAgent(httpParams, userAgent); // 创建一个 HttpClient 实例 // 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient // 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); return httpClient; } /** * @Title: doGet * @author 杨贵松 * @date 2014-3-18 下午12:39:58 * @Description: doGet请求 * @param url * @param params * @return * @throws Exception * String 返回 */ @SuppressWarnings("rawtypes") public static String doGet(String url, Map params) throws Exception { /* 建立HTTPGet对象 */ String paramStr = ""; if (params != null) { Iterator iter = params.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); paramStr += paramStr = "&" + key + "=" + val; } } if (!paramStr.equals("")) { paramStr = paramStr.replaceFirst("&", "?"); url += paramStr; } HttpGet httpRequest = new HttpGet(url); String strResult = "doGetError"; /* 发送请求并等待响应 */ HttpResponse httpResponse = httpClient.execute(httpRequest); /* 若状态码为200 ok */ if (httpResponse.getStatusLine().getStatusCode() == 200) { /* 读返回数据 */ strResult = EntityUtils.toString(httpResponse.getEntity()); } else { strResult = "Error Response: " + httpResponse.getStatusLine().toString(); } Log.v("strResult", strResult); return strResult; } /** * @Title: doPost * @author 杨贵松 * @date 2014-3-18 下午12:39:38 * @Description: doPost请求 * @param url * @param params * @return * @throws Exception * String 返回 */ public static String doPost(String url, List<NameValuePair> params) throws Exception { /* 建立HTTPPost对象 */ HttpPost httpRequest = new HttpPost(url); String strResult = "doPostError"; /* 添加请求参数到请求对象 */ if (params != null && params.size() > 0) { httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); } if(null != JSESSIONID){ httpRequest.setHeader("Cookie", "JSESSIONID="+JSESSIONID); } /* 发送请求并等待响应 */ HttpResponse httpResponse = httpClient.execute(httpRequest); /* 若状态码为200 ok */ if (httpResponse.getStatusLine().getStatusCode() == 200) { /* 读返回数据 */ strResult = EntityUtils.toString(httpResponse.getEntity()); /* 获取cookieStore */ CookieStore cookieStore = httpClient.getCookieStore(); List<Cookie> cookies = cookieStore.getCookies(); for(int i=0;i<cookies.size();i++){ if("JSESSIONID".equals(cookies.get(i).getName())){ JSESSIONID = cookies.get(i).getValue(); break; } } } Log.v("strResult", strResult); return strResult; } }
Android 通过httpclient请求web服务器,并解决用户登录session保持
于 2022-07-01 06:41:48 首次发布