쿠키 및 세션관리가 머리 터지게 잘 안되서.. 그냥 제가 만들었습니다.
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); } }
} |