Android 네트워크 프로 그래 밍 의 --- HttpClient 와 HttpURLConnection 공용 쿠키

HttpClient 와 HttpURLConnection 공용 SessionId
           HttpClient 와 HttpUrlConnection 은 Android 에서 HTTP 작업 을 할 때 가장 흔히 볼 수 있 는 접근 방식 입 니 다.한 프로그램 에서 가끔 이 두 가지 방식 을 사용 합 니 다. 어떻게 하면 그들 이 쿠키 를 공유 하고 클 라 이언 트 가 서버 에 방문 하여 Session 을 유지 하 며 통신 할 수 있 습 니까?
httpClient 와 HttpUrlConnection 에 대한 쿠키 가 져 오기 및 발송 은 주로 sessionID 의 공유 입 니 다.
        httpClient 가 져 오기 및 보 내기 세 션 값:     
 
         
   	 HttpPost httpPost = new HttpPost(url);
	 
          //  SessionId     
   	 if(null != mSESSIONID){
		httpPost.setHeader("Cookie", "SESSIONID=" + mSESSIONID);
	} 
   
 	 DefaultHttpClient httpClient = new DefaultHttpClient();
 	 httpResponse = httpClient.execute(httpPost);
 	if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    		 HttpEntity entity = httpResponse.getEntity();
 
		 CookieStore mCookieStore = httpClient.getCookieStore();
  		List<Cookie> cookies = mCookieStore.getCookies();
		//       Cookie   
 		for (int i = 0; i < cookies.size(); i++) { 
			if ("SESSIONID".equals(cookies.get(i).getName())) { 
  			   mSESSIONID = cookies.get(i).getValue();
			   break;
		} 
		
	}
}

프로그램 에 위의 sessionId 를 저장 하거나 전역 변수 나 Shared Preferences 로 저장 합 니 다. 이 sessionId 의 세 션 시간 과 프로그램 업 무 를 보십시오.  
    HttpUrlConnection 세 션 값 가 져 오기 및 보 내기:
	HttpURLConnection url_con = null;
	URL url = new URL(reqUrl);
	url_con = (HttpURLConnection) url.openConnection();
	//  session
	if (mSESSIONID!= null) {
		url_con.setRequestProperty("Cookie","JSESSIONID="+mSESSIONID);
 	}
	...
	String cookieVal =con.getHeaderField("Set-Cookie");
	//   session 	
	if (cookieVal != null) {
 		StringmSESSIONID= cookieVal.substring(0, cookieVal.indexOf(";"));
	}       
	HttpURLConnection url_con = null;

HttpURLConnection 과 HttpClient 비교 (Android):
     
HttpURLConnection 과 HttpClient 는 HTTPS 프로 토 콜, IPv 6, 스 트림 형식 으로 업로드 와 다운로드, 시간 초과 설정, 연결 풀 등 기능 을 지원 합 니 다.
         
DefaultHttpClient 와 그의 형제 AndroidHttpClient 는 모두 HttpClient 의 구체 적 인 실현 클래스 로 많은 API 를 가지 고 있 으 며 비교적 안정 적 이 고 bug 수량 도 적다.그러나 HttpClient 의 API 수량 이 너무 많아 서 호환성 을 파괴 하지 않 고 업그레이드 하고 확장 하기 어렵 기 때문에 현재 안 드 로 이 드 팀 은 HttpClient 를 향상 시 키 고 최적화 하 는 데 적 극 적 이지 않다.
  HttpURLConnection 은 다 용도, 경 량 극 의 HTTP 클 라 이언 트 로 이 를 사용 하여 HTTP 작업 을 하면 대부분의 응용 프로그램 에 적용 할 수 있 습 니 다.HttpURLConnection 의 API 는 비교적 간단 하지만 동시에 우 리 는 그것 을 더욱 쉽게 사용 하고 확장 할 수 있 습 니 다.그러나 안 드 로 이 드 2.2 버 전에 서 HttpURLConnection 에는 지루 한 bug 가 존재 해 왔 다.예 를 들 어 읽 을 수 있 는 InputStream 에 close () 방법 을 호출 할 때 연결 탱크 가 효력 을 잃 을 수 있 습 니 다.그러면 우리 의 일반적인 해결 방법 은 연결 탱크 의 기능 을 직접 사용 하지 않 는 것 이다.          Android 2.3 버 전에 서 HTTPS 개선 도 추 가 했 습 니 다. 현재 HttpsURLConnection 은 SNI (Server Name Indication) 방식 으로 연결 되 어 여러 HTTPS 호스트 가 같은 IP 주 소 를 공유 할 수 있 도록 합 니 다.그 밖 에 압축 과 세 션 의 메커니즘 도 추가 되 었 다.연결 에 실패 하면 자동 으로 다시 연결 을 시도 합 니 다.이로써 HttpsURLConnection 은 기 존 버 전의 호환성 을 파괴 하지 않 는 전제 에서 최신 서버 를 더욱 효율적으로 연결 할 수 있 게 되 었 다.Android 4.0 버 전에 서 우 리 는 응답 하 는 캐 시 메커니즘 을 추가 했다.캐 시가 설 치 된 후 (HttpResponseCache 를 호출 하 는 install () 방법) 모든 HTTP 요청 은 다음 과 같은 세 가지 상황 을 충족 시 킵 니 다. 1. 모든 캐 시 응답 은 로 컬 저장 소 에서 제 공 됩 니 다.작업 을 시작 할 필요 가 없 는 네트워크 연결 요청 으로 모든 응답 을 즉시 얻 을 수 있 습 니 다.2. 상황 에 따라 정 해진 캐 시 응답 은 서버 가 업데이트 검 사 를 해 야 합 니 다.예 를 들 어 클 라 이언 트 가 '/ foo. png 이 그림 이 바 뀌 면 저 에 게 보 내 주세요' 와 같은 요청 을 했 습 니 다. 서버 는 업 데 이 트 된 데 이 터 를 되 돌려 주거 나 304 Not Modified 상 태 를 되 돌려 야 합 니 다.요청 한 내용 이 발생 하지 않 으 면 클 라 이언 트 는 데 이 터 를 다운로드 하지 않 습 니 다.3. 캐 시 없 는 응답 은 서버 에서 직접 제공 합 니 다.이 부분 응답 은 나중에 응답 캐 시 에 저 장 됩 니 다.이 기능 은 4.0 이후 버 전에 만 있 는 것 이기 때문에 보통 캐 시 에 응답 하 는 반사 적 인 방식 으로 시작 할 수 있 습 니 다.다음 예제 코드 는 Android 4.0 및 이후 버 전에 서 캐 시 에 응답 하 는 기능 을 사용 하 는 방법 을 보 여 주 며 이전 버 전에 영향 을 주지 않 습 니 다.   
 private void enableHttpResponseCache() {  
    try {  
        long httpCacheSize = 10 * 1024 * 1024; // 10 MiB  
        File httpCacheDir = new File(getCacheDir(), "http");  
        Class.forName("android.net.http.HttpResponseCache")  
            .getMethod("install", File.class, long.class)  
            .invoke(null, httpCacheDir, httpCacheSize);  
    } catch (Exception httpResponseCacheNotAvailable) {  
    }  
}   

     웹 서버 를 설정 하고 HTTP 응답 에 캐 시 메 시 지 를 추가 해 야 합 니 다.
어떤 것 이 가장 좋 습 니까?
Android 2.2 버 전에 서 는 HttpClient 가 버그 를 적 게 가지 고 있 기 때문에 사용 하 는 것 이 최선 입 니 다.안 드 로 이 드 2.3 버 전 및 이후 HttpURLConnection 이 최선 이다.그것 의 API 는 간단 하고 부피 가 작 기 때문에 안 드 로 이 드 프로젝트 에 매우 적합 하 다.압축 과 캐 시 체 제 는 네트워크 방문 의 데 이 터 를 효과적으로 줄 일 수 있 고 속도 향상 과 전기 절약 에 도 큰 역할 을 한다.새로운 프로그램 에 대해 서 는 HttpURLConnection 을 사용 하 는 것 을 더욱 선 호 해 야 합 니 다.

좋은 웹페이지 즐겨찾기