Android 네트워크 프로 그래 밍 의 --- HttpClient 와 HttpURLConnection 공용 쿠키
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 을 사용 하 는 것 을 더욱 선 호 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HttpClient 'GET' - 각도 단순화이봐, 친구들. 오늘 저는 API를 호출하는 Angular의 방법을 분석하고 싶습니다. 각 CRUD 작업에 대한 기사를 작성할 예정이므로 눈을 떼지 말고 팔로우하십시오! 이것이 기본이며 Angular 웹 사이트에서 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.