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