HttpPost.setHeader("Cookie", "PHPSESSID=" + PHPSESSID)方式的HttpClient工具类

摘要: session在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识

session 在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一 个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要 将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,在php中这个 sessionid的名字叫做PHPSESSID。 在java 下sessionid 的名字叫做JSESSIONID  

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++){  
 //这里是读取Cookie['JSSESSID']的值存在静态变量中,保证每次都是同一个值
                if("JSESSIONID".equals(cookies.get(i).getName())){  
                    JSESSIONID = cookies.get(i).getValue();  
                    break;  
                }  
            }  
        }  
        Log.v("strResult", strResult);  
        return strResult;  
    }  
  
}  
(4.1.28.2)HttpPost.setHeader("Cookie", "PHPSESSID=" + PHPSESSID)方式的HttpClient工具类

猜你喜欢

转载自blog.csdn.net/czh500/article/details/80216768