Android http请求类添加Cookie

来源:互联网 发布:美微柠檬免费网络电视 编辑:程序博客网 时间:2024/05/14 08:32
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。保证每次请求都是最新的Cookisli.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。保证每次请求都是最新的Cookisli.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();// 销毁HttpClienthttpClient.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;}}

0 0
原创粉丝点击