쿠키 및 세션관리가 머리 터지게 잘 안되서.. 그냥 제가 만들었습니다.


CookieManager쓰고 하면 Sync 맞추느라 모든 엑티비티 resume 이랑 pause 다 써줘야하고 귀찮아서. 제가 만들어 보았내요.

사용해보시고 . 후기 부탁드립니다.


HttpTransfer.getInstance(mCtx).HttpRequestPost(mCtx, address, Hm); 이런식으로 사용하시면 되고

Hm은 Post로 전달한 값을을 HashMap<String, Object>에 담아서 넘겨주시면됩니다.

SSL 지원가능 합니다.

세션 유지  및 생성 , 쿠키 유지 및 생성 가능합니다.


코드 임포트 하시면 JSONObject 에 오류가 날겁니다.

Try catch 처리 해주시면 될겁니다. 저는 따로 만들어서 써서 조금 JSON 라이브러리가 다릅니다.


개선할 점이 있으면 코멘트 부탁드립니다.

 

퍼가실땐 출처 부탁드립니다.



package com.puns.kst.what.libs;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;


import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.NameValuePair;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.client.params.HttpClientParams;

import org.apache.http.client.protocol.ClientContext;

import org.apache.http.cookie.Cookie;

import org.apache.http.impl.client.BasicCookieStore;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.params.HttpConnectionParams;

import org.apache.http.params.HttpParams;

import org.apache.http.protocol.BasicHttpContext;

import org.apache.http.protocol.HttpContext;

import org.json.JSONObject;


import android.annotation.SuppressLint;

import android.app.Activity;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.net.http.AndroidHttpClient;

import android.os.Build;

import android.util.Log;


public class HttpTransfer {

private HttpContext httpContext = new BasicHttpContext();

private AndroidHttpClient httpClient;

private Context mCtx;

private static HttpTransfer instance;


private HttpTransfer(Context mCtx) {

HttpClientConfig(mCtx);

HttpContextConfig();

}


public static HttpTransfer getInstance(Context mCtx) {

if (instance == null) {

instance = new HttpTransfer(mCtx);

} else {

instance.mCtx = mCtx;

}

return instance;

}


private void HttpClientConfig(Context mCtx) {

httpClient = AndroidHttpClient.newInstance("Whatsup", this.mCtx = mCtx);

HttpParams params = httpClient.getParams();

HttpConnectionParams.setConnectionTimeout(params, 1000 * 20);

HttpConnectionParams.setSoTimeout(params, 1000 * 20);

HttpClientParams.setCookiePolicy(params, org.apache.http.client.params.CookiePolicy.BEST_MATCH);

HttpClientParams.setRedirecting(params, true);

}


private void HttpContextConfig() {

httpContext.setAttribute(ClientContext.COOKIE_STORE, new CookieStore());

}


public void HttpCookieClear() {

((CookieStore) httpContext.getAttribute(ClientContext.COOKIE_STORE)).clear();

}


public String HttpRequestPost(Context mCtx, String address, Map<String, Object> Hm) {

HttpPost getRequest = new HttpPost(address);

getRequest.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

try {

if (Hm != null) {

Iterator<Entry<String, Object>> iterator = Hm.entrySet().iterator();

ArrayList<NameValuePair> nvps = new ArrayList<NameValuePair>();

while (iterator.hasNext()) {

Entry<String, Object> param = iterator.next();

if (param.getValue() != null) {

nvps.add(new BasicNameValuePair(param.getKey(), param.getValue().toString()));

}

Log.d("Web_Param", param.getKey() + " : " + param.getValue());

}

getRequest.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));

}

HttpResponse response = httpClient.execute(getRequest, httpContext);


final HttpEntity entity = response.getEntity();

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK && entity != null) {

InputStream mIs = null;

try {

mIs = entity.getContent();

BufferedReader in = new BufferedReader(new InputStreamReader(mIs));

StringBuffer buffer = new StringBuffer();

String line;

while ((line = in.readLine()) != null) {

buffer.append(line);

}

Log.d("Web_Result", "" + buffer.toString());

return buffer.toString();


} finally {

if (mIs != null) {

mIs.close();

}

entity.consumeContent();

}

} else {

Log.e("Web_Err", "NO_OK");

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}


protected class CookieStore extends BasicCookieStore {


public final static String COOKIE_STORE = "httpclient.cookie";


@Override

public synchronized void addCookie(Cookie cookie) {

super.addCookie(cookie);

addCookieSave(cookie);

}


@Override

public synchronized void clear() {

super.clear();

Editor preEdit = getPreferences().edit();

preEdit.clear();

preEdit.commit();

}


@Override

public synchronized void addCookies(Cookie[] cookies) {

super.addCookies(cookies);

for (int i = 0; i < cookies.length; i++) {

addCookieSave(cookies[0]);

}

}


@Override

public synchronized List<Cookie> getCookies() {

List<Cookie> cookies = super.getCookies();

if (cookies.isEmpty()) {

cookies = new ArrayList<Cookie>();

Map<String, ?> cookieKey = getPreferences().getAll();

for (final Map.Entry<String, ?> entry : cookieKey.entrySet()) {

final JSONObject cookie = new JSONObject(entry.getValue().toString());

Cookie cook = new Cookie() {


@Override

public boolean isSecure() {

return cookie.getBoolean("secure");

}


@Override

public boolean isPersistent() {

return cookie.getBoolean("persistent");

}


@Override

public boolean isExpired(Date date) {

return false;

}


@Override

public int getVersion() {

return cookie.getInt("version");

}


@Override

public String getValue() {

return cookie.getString("value");

}


@Override

public int[] getPorts() {

return null;

}


@Override

public String getPath() {

return cookie.getString("path");

}


@Override

public String getName() {

return entry.getKey();

}


@Override

public Date getExpiryDate() {

if (cookie.isNull("expiryDate") == false) {

return new Date(cookie.getLong("expiryDate"));

}

return null;

}


@Override

public String getDomain() {

return cookie.getString("domain");

}


@Override

public String getCommentURL() {

return null;

}


@Override

public String getComment() {

return null;

}


};

cookies.add(cook);


}

}

return cookies;

}


private synchronized void addCookieSave(Cookie cookie) {

Editor preEdit = getPreferences().edit();

JSONObject cookieSave = new JSONObject();

cookieSave.put("secure", cookie.isSecure());

cookieSave.put("persistent", cookie.isPersistent());

cookieSave.put("version", cookie.getVersion());

cookieSave.put("value", cookie.getValue());

cookieSave.put("path", cookie.getPath());

if (cookie.getExpiryDate() != null) {

cookieSave.put("expiryDate", cookie.getExpiryDate().getTime());

}

cookieSave.put("domain", cookie.getDomain());

preEdit.putString(cookie.getName(), cookieSave.toString());

preEdit.commit();

}


@SuppressLint("NewApi")

public SharedPreferences getPreferences() {

if (Build.VERSION.SDK_INT >= 11) {

return mCtx.getSharedPreferences(COOKIE_STORE, Activity.MODE_MULTI_PROCESS);

}

return mCtx.getSharedPreferences(COOKIE_STORE, Activity.MODE_PRIVATE);

}

}


}