Android 通过httpclient请求web服务器,并解决用户登录session保持

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;
 }

}

你可能感兴趣的:(httpclient,session,web服务器)