Android httpリクエストクラスCookie追加

10294 ワード

package com.test.app;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.StrictMode;
import android.util.Log;

/**
 *     
 * 
 * @author Administrator
 * 
 */
public class HttpClientTool {

	public String TIME_OUT = "    ";
	public int time = 20000;
	/**       cokie   */
	private static CookieStore uCookie = null;

	/**       **/
	private Context context;

	public HttpClientTool(Context context) {
		this.context = context;
	}

	public CookieStore getuCookie() {
		return uCookie;
	}

	public void setuCookie(CookieStore uCookie) {
		this.uCookie = uCookie;
	}

	/**       、    、     **/
	private Header[] getHeader() {
		/**       end **/
		MyHttpCookies li = new MyHttpCookies(context);
		return li.getHttpHeader();
	}

	/**
	 *     -- param  .
	 * 
	 * @param params
	 * @param url
	 * @return
	 */
	public String doPost(List<NameValuePair> params, String url) {
		network();
		String result = null;
		HttpPost httpPost = new HttpPost(url);
		httpPost.setHeaders(this.getHeader());
		System.out.println("---->url=" + url);

		DefaultHttpClient httpClient = new DefaultHttpClient();
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(params));

			/**     Session **/
			/**   Cookie **/
			MyHttpCookies li = new MyHttpCookies(context);
			CookieStore cs = li.getuCookie();
			/**      App   Cookie  ,       ,   APP Cookie     。     Cooke    **/
			if (cs != null) {
				httpClient.setCookieStore(li.getuCookie());
			}
			/**     Session end **/
			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, time);
			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, time);
			HttpResponse httpResp = httpClient.execute(httpPost);
			if (httpResp.getStatusLine().getStatusCode() == 200) {
				result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
				Log.i("HttpPost", "HttpPost      ,      :");
				Log.i("result", result);
				/**          **/
				/**           Cookis  APP  **/
				//       ,     Cookis。           Cookis
				li.setuCookie(httpClient.getCookieStore());
				/**   Cookie end **/
			} else {
				Log.i("HttpPost", "HttpPost      ");
				System.out.println("0000===>" + EntityUtils.toString(httpResp.getEntity(), "UTF-8"));
				result = "{status:'0',message:'    '}";
			}
		} catch (SocketTimeoutException e) {
			result = "{status:'0',message:'" + TIME_OUT + "'}";
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			result = "{status:'0',message:'    '}";
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			result = "{status:'0',message:'    '}";
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			httpPost.abort();
			httpClient.getConnectionManager().shutdown();
		}
		return result;
	}

	/**
	 *     ,    .
	 * 
	 * @param url
	 * @return
	 */
	public String doPost(String url) {
		network();
		String result = null;
		HttpPost httpPost = new HttpPost(url);
		httpPost.setHeaders(this.getHeader());
		System.out.println("---->url=" + url);
		DefaultHttpClient httpClient = new DefaultHttpClient();
		try {

			/**     Session **/
			/**   Cookie **/
			MyHttpCookies li = new MyHttpCookies(context);
			CookieStore cs = li.getuCookie();
			/**      App   Cookie  ,       ,   APP Cookie     。     Cooke    **/
			if (cs != null) {
				httpClient.setCookieStore(li.getuCookie());
			}
			/**     Session end **/
			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, time);
			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, time);
			HttpResponse httpResp = httpClient.execute(httpPost);
			if (httpResp.getStatusLine().getStatusCode() == 200) {
				result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
				Log.i("HttpPost", "HttpPost      ,      :");
				Log.i("result", result);
				/**          **/
				/**           Cookis  APP  **/
				//       ,     Cookis。           Cookis
				li.setuCookie(httpClient.getCookieStore());
				/**   Cookie end **/
			} else {
				Log.i("HttpPost", "HttpPost      ");
				System.out.println("0000===>" + EntityUtils.toString(httpResp.getEntity(), "UTF-8"));
				result = "{success:false,msg:'    '}";
			}
		} catch (SocketTimeoutException e) {
			result = "{status:'0',message:'" + TIME_OUT + "'}";
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			result = "{status:'0',message:'    '}";
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			result = "{status:'0',message:'    '}";
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * get     url
	 * 
	 * @param url
	 * @param params
	 * @return
	 */
	public String doGet(List<NameValuePair> params, String url) {
		/**   HTTPGet   **/
		String paramStr = "";
		if (params == null)
			params = new ArrayList<NameValuePair>();
		/**          **/
		for (NameValuePair obj : params) {
			paramStr += paramStr = "&" + obj.getName() + "=" + URLEncoder.encode(obj.getValue());
		}
		if (!paramStr.equals("")) {
			paramStr = paramStr.replaceFirst("&", "?");
			url += paramStr;
		}
		System.out.println("do_get_url ==== >" + url);
		return doGet(url);
	}

	/**
	 *   GET          doGet     :
	 * 
	 * @param url
	 *                
	 * @return    String jsonResult;
	 * 
	 */
	public String doGet(String url) {
		System.out.println("url===>" + url);
		network();
		/**   HttpGet   **/
		HttpGet httpGet = new HttpGet(url);
		httpGet.setHeaders(this.getHeader());

		DefaultHttpClient httpClient = new DefaultHttpClient();
		String result;
		try {
			/**     Session **/
			/**   Cookie **/
			MyHttpCookies li = new MyHttpCookies(context);
			CookieStore cs = li.getuCookie();
			/**      App   Cookie  ,       ,   APP Cookie     。     Cooke    **/
			if (cs != null) {
				httpClient.setCookieStore(li.getuCookie());
			}
			/**     Session end **/
			/*           */
			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, time);
			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, time);
			HttpResponse httpResponse = httpClient.execute(httpGet);
			/*      200 ok */
			if (httpResponse.getStatusLine().getStatusCode() == 200) {
				/*       */
				result = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
				Log.i("HttpPost", "HttpGet      ,      :");
				Log.i("result", result);
				li.setuCookie(httpClient.getCookieStore());
			} else {
				Log.i("HttpPost", "HttpGet      ");
				result = "{status:'0',message:'    '}";
				System.out.println("0000===>" + EntityUtils.toString(httpResponse.getEntity(), "UTF-8"));
			}
		} catch (ClientProtocolException e) {
			result = e.getMessage();
			e.printStackTrace();
		} catch (IOException e) {
			result = e.getMessage();
			e.printStackTrace();
		} catch (Exception e) {
			result = e.getMessage();
			httpGet.abort();
			//   HttpClient
			httpClient.getConnectionManager().shutdown();
		}
		return result;
	}

	@SuppressLint("NewApi")
	private void network() {
		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites()
				.detectNetwork() // or .detectAll() for all detectable problems
				.build());
	}
}

/**
 * http             
 * 
 * @author Administrator
 */
class MyHttpCookies {
	/**           */
	private static int pageSize = 10;
	/**       cokie   */
	private static CookieStore uCookie = null;
	/**    HTTP      */
	private static Header[] httpHeader;
	/** HTTP        */
	private static String httpProxyStr;
	/** http     url   **/
	public static String baseurl = "http://www.2cto.com /River";
	/**       **/
	Context context;

	public MyHttpCookies(Context context) {
		this.context = context;
		/** y      **/
		/** y      **/
		Header[] header = {new BasicHeader("PagingRows", String.valueOf(pageSize))};
		httpHeader = header;
	}

	/**
	 *         ,   cmwap、CMNET、wifi 3G
	 */
	@SuppressWarnings("static-access")
	public void initHTTPProxy() {
		WifiManager wifiManager = (WifiManager) (context.getSystemService(context.WIFI_SERVICE));
		if (!wifiManager.isWifiEnabled()) {
			Uri uri = Uri.parse("content://telephony/carriers/preferapn"); //          APN   
			Cursor mCursor = context.getContentResolver().query(uri, null, null, null, null);
			if (mCursor != null) {
				mCursor.moveToNext(); //          ,       
				httpProxyStr = mCursor.getString(mCursor.getColumnIndex("proxy"));
			}
		} else {
			httpProxyStr = null;
		}
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public CookieStore getuCookie() {
		return uCookie;
	}

	public void setuCookie(CookieStore uCookie) {
		this.uCookie = uCookie;
	}

	public Header[] getHttpHeader() {
		return httpHeader;
	}

	public String getHttpProxyStr() {
		return httpProxyStr;
	}
}