OkHttp 용법 및 해석

7313 단어 OkHttp
1. OkHttp 소개 
       OkHttp 는 Square 사가 개발 한 Http 유 니 버 설 라 이브 러 리 로 HTTP 와 HTTPP / 2 를 지원 하 며 Android 와 자바 애플 리 케 이 션 개발 에 사용 된다.OkHttp 는 효율 적 인 HTTP 클 라 이언 트 로 같은 주소 의 링크 가 같은 socket 을 공유 하 는 것 을 지원 합 니 다. 연결 풀 을 통 해 응답 지연 을 줄 이 고 투명 한 GZIP 압축, 캐 시 요청 등 장점 도 있 습 니 다.서버 에 여러 개의 IP 주 소 를 설정 하면 첫 번 째 IP 연결 이 실 패 했 을 때 OkHttp 는 자동 으로 다음 IP 를 시도 합 니 다.OkHttp 는 프 록 시 문제 와 SSL 악수 실패 문제 도 처리 했다.
       HttpURLConnection 은 다 용도, 경량급 http 클 라 이언 트 로 네트워크 요청 에 대한 패 키 징 이 HttpClient 보다 철저 하지 않 고 api 가 간단 하 며 사용 하기에 편리 하지 않 습 니 다.확장 이 쉽 지만 봉인 하기 가 상대 적 으로 어렵 습 니 다. Android 2. 2 에서 Inputstream 을 닫 을 때 연결 풀 이 효력 을 잃 는 등 문제 가 존재 하 므 로 연결 풀 을 사용 하지 않 고 해결 해 야 합 니 다.Android 4.4 원생 HttpURLConnection 바 텀 은 OkHttp 로 교체 되 었 습 니 다.
       HttpClient 때 아파 치 의 3 자 네트워크 프레임 워 크 는 네트워크 요청 이 완벽 한 패 키 징 을 했 고 api 가 많 으 며 사용 하기에 편리 하고 개발 이 빠르다.사용 이 비교적 안정 적 이지 만 api 가 많 기 때문에 호환성 을 파괴 하지 않 고 확장 하기 어렵다.그래서 안 드 로 이 드 5.0 은 폐기 되 었 고 6.0 은 점차적으로 삭제 되 었 으 며 전면적으로 OkHttp 를 사용 하 는 것 으로 바 뀌 었 습 니 다.
       현재 많은 유명한 안 드 로 이 드 3 자 프레임 워 크 는 OKHttp 를 네트워크 연결 의 기본 스 택 으로 사용 하고 있다. 예 를 들 어 Volley, Gilde, Retrofit 등 이다.
2. 기본 사용
   (1) 、 프로젝트 에 OkHttp 에 대한 의존 도 를 추가 합 니 다.
          OkHttp 모듈 을 사용 해 야 하 는 build 에 있 습 니 다.gradle 파일 에 다음 의존 라 이브 러 리 를 추가 합 니 다.(버 전 번호 변경 가능)
dependencies {
    compile 'com.squareup.okhttp3:okhttp:3.6.0'
}

  (2) 초기 화
          OkHttp 프레임 워 크 의 핵심 클래스 는 OkHttpClient 로 직접 예화 할 수 있 습 니 다.OkHttpClient 내부 에서 동시 다발, 다 중 스 레 드, Socket 재 활용 등 문 제 를 처 리 했 기 때문에 자원 을 절약 하기 위해 전체 응용 프로그램 에서 OkHttpClient 대상 을 사용 하면 됩 니 다. Singleton (단일 예) 패 키 징 을 할 수 있 습 니 다.
  OkHttpClient client=new OkHttpClient();

(3) 、 OkHttp 구축 요청
           Http 요청 을 대표 하 는 클래스 는 Request 입 니 다. 이 클래스 는 구조 기 모드 를 사용 합 니 다. 가장 간단 한 구조 get (기본 값 은 get 요청 체) 요청 은 다음 과 같 습 니 다.
 Request request=new Request.Builder()
                .url("url")
                .build();

           구조 post 요청, Request 를 구축 할 때 요청 체 RequestBody 예 시 를 다음 과 같이 추가 합 니 다.
  RequestBody body=new FormBody.Builder()
              .add("name","  ")
              .add("age","12")
              .build();
 Request request=new Request.Builder() .post(body) .url(url) .build();
 

(4) 、 OkHttp 요청 발송
          요청 한 전송 은 두 가지 형식 이 있 습 니 다. 하 나 는 직접 동기 화하 고 호출 스 레 드 를 막 으 며 결 과 를 직접 되 돌려 주 는 것 입 니 다.(추천 하지 않 습 니 다. Android 에서 UI 스 레 드 를 막 을 수 있 습 니 다)
                                               다른 하 나 는 대기 열 을 통 해 비동기 로 실행 되 며 호출 스 레 드 를 막 지 않 고 리 셋 방법 으로 결 과 를 되 돌려 주 는 것 이다.다음 과 같다.
동기 화 실행:
 
//    null,           
 Response response=client.newCall(request).execute();


비동기 반전:
  
client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //         
                //  :       !(  UI     UI  )
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //  
                //  :       !(  UI     UI   )
            }
        });

이상 간단하게 OkHttp 사용 을 소개 하 며, 마지막 으로 소스 코드 를 첨부 합 니 다.
3. OkHttp 상세 설명
   요청, 응답, 통화 기본 개념
    위의 코드 에는 Request, Response, Call 등 몇 가지 상용 클래스 가 포함 되 어 있 습 니 다.다음은 각각 소개 한다.
   Request
    모든 HTTP 요청 은 URL, 방법 (GET 또는 POST 또는 기타), 일부 HTTP 헤드 를 포함 합 니 다.요청 은 특정 콘 텐 츠 형식의 데이터 류 의 주체 부분 도 포함 할 수 있 습 니 다.
   Response
    응답 은 상태 코드, HTTP 헤드, 주체 부분 을 포함 하 는 요청 에 대한 답장 입 니 다.
   콜 모델
     OkHttp 는 중간 에 여러 개의 요청 이나 응답 이 있 을 수 있 음 에 도 불구 하고 Call 을 사용 하여 요 구 를 만족 시 키 는 모델 을 추상 화 합 니 다.Call 을 실행 하 는 데 는 두 가지 방식 이 있 습 니 다. 동기 화 되 거나 다 릅 니 다.
     Http 클 라 이언 트 의 임 무 는 요청 과 응답 을 처리 하 는 것 입 니 다. 이것 은 말 하기는 간단 하지만 실제 과정 은 매우 복잡 합 니 다.
            요청: Http 요청 에는 URL, 요청 방법 (예: GET 또는 POST), 요청 헤더 가 포함 되 어 있 습 니 다.요청 체 를 포함 할 수도 있 고 데이터 흐름 일 수도 있 고 지정 한 콘 텐 츠 분류 일 수도 있 습 니 다.
            응답: 요청 에 응답 코드 로 응답 합 니 다 (예 를 들 어 200 은 성공 을 의미 하고 404 는 페이지 를 찾 을 수 없습니다). 응답 헤드 와 응답 체 입 니 다.
     요청 한 재 작성
      정확성 과 전송 효율 을 확보 하기 위해 OkHttp 는 요청 을 보 내기 전에 다시 씁 니 다. 예 를 들 어 다음 과 같 습 니 다.
      OkHttp 는 원본 요청 에 없 는 머리 정 보 를 추가 할 수 있 습 니 다. Content - Length [내용 길이], Transfer - Encoding (전송 코드), User - agent (사용자 에이전트), Host (호스트), Connecton (연결) 과 Content - Type (콘 텐 츠 유형) 을 포함 합 니 다.
      투명 한 응답 압축 (transparent response compression) 을 실현 하기 위해 OkHttp 는 Accept - Encoding 헤드 정 보 를 추가 합 니 다.
      쿠키 를 받 으 면 OkHttp 는 쿠키 헤드 정 보 를 추가 합 니 다.
      일부 요청 은 응답 에 캐 시 를 할 수 있 습 니 다.캐 시 된 응답 이 최신 이 아니라면, OkHttp 는 업 데 이 트 된 응답 을 다운로드 할 수 있 는 조건 부 GET 요청 을 할 수 있 습 니 다.이 기능 은 If - Modified - Since 와 If - Node - match 등 헤더 정 보 를 추가 해 야 합 니 다.
      응답 재 작성
       투명 압축 을 사용 하면 OkHttp 는 응답 Content - Encoding 과 Content - Length 헤드 정 보 를 제거 합 니 다. 압축 해제 후의 응답 체 에 적용 할 수 없 기 때 문 입 니 다.
       조건 부 GET 가 성공 하면 네트워크 측면의 응답 과 캐 시 응답 이 자동 으로 합 쳐 집 니 다.
   
       방향 을 바꾸다
        요청 한 URL 이 이동 되면 서버 는 302 와 같은 응답 코드 를 되 돌려 새로운 URL 을 가 리 킵 니 다.OkHttp 는 새로운 URL 을 따라 최종 응답 을 얻 을 수 있 습 니 다.(사용 자 는 Okhttp 요청 을 한 번 만 보 내 면 OkHttp 에서 리 셋 요청 을 수행 하고 최종 요청 결 과 를 얻 을 수 있 습 니 다)
OkHttp 用法及解析_第1张图片
요청 한 재 시도
연결 실패 가 발생 할 수 있 습 니 다. 네트워크 연결 상태 가 좋 지 않 거나 서버 가 접근 할 수 없 을 수도 있 습 니 다.OkHttp 는 자동 으로 다른 경로 로 요청 을 다시 시도 합 니 다.
콜 모델
이상 의 재 작성, 재 설정, 재 시도 등 작업 으로 인해 간단 한 요청 이 여러 요청 과 응답 을 할 수 있 습 니 다.OkHttp 는 Call 이라는 개념 을 사용 하여 모델 링 을 합 니 다. 당신 의 요청 임 무 를 만족 시 키 기 위해 중간 에 몇 번 의 요청 과 응답 을 했 든 하나의 Call 이 라 고 할 수 있 습 니 다.
Call 은 두 가지 방식 으로 실 행 됩 니 다.
      동기 화 방식: 읽 을 수 있 을 때 까지 스 레 드 가 막 힐 것 입 니 다.
      비동기 방식: 임의의 스 레 드 에서 줄 을 서 라 고 요청 합 니 다. 읽 을 수 있 을 때 다른 스 레 드 에서 리 셋 을 받 습 니 다.
Call 의 취소
실행 중인 요청 을 중단 하려 면 Call. cancel () 을 사용 하 십시오.스 레 드 가 응답 을 요청 하거나 읽 고 있 으 면 IOException 을 받 습 니 다.이 방법 을 사용 하면 콜 이 필요 하지 않 을 때 취소 하면 네트워크 트 래 픽 을 절약 할 수 있 습 니 다.
Call 은 임의의 스 레 드 에서 취소 할 수 있 습 니 다. 요청 이 완료 되 지 않 으 면 취소 방법 을 호출 하 는 데 실패 할 수 있 습 니 다. 요청 체 와 응답 체 의 코드 를 읽 고 쓰 면 IOException 이 발생 합 니 다.
차단기
OkHtttp 는 응답 을 요청 하 는 과정 에서 차단기, 차단기, 응답 하 는 데이터 등 을 추가 할 수 있 습 니 다.
의존 추가 필요
//      
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'


사용법
 //         
 HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor();

 //       (NONE:    ; BASIC:   HEADERS  ;BODY )
 interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);

 //      
 OkHttpClient client=new OkHttpClient().newBuilder().addInterceptor(interceptor).build();
 

OkHttp 用法及解析_第2张图片
         
          
 
         

좋은 웹페이지 즐겨찾기