찾다

 >  Q&A  >  본문

Android的三种http请求方式的区别

关于Android的三种http请求方式:
(1)okhttp
(2)httpURLConnection
(3)httpClient

谁熟悉的能介绍一下,并解析一下区别呢?

PHP中文网PHP中文网2811일 전610

모든 응답(2)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-17 17:47:01

    이 질문은 약간 문제가 있습니다. 이것은 세 가지 방법이 아닙니다. okhttp는 단지 네트워크 액세스를 더 높은 수준으로 캡슐화한 것입니다. httpURLConnection과 httpClient는 액세스를 달성하는 두 가지 구체적인 방법입니다.
    1), HttpClient
    HttpClient는 Apache Jakarta Common의 하위 프로젝트로, HTTP 프로토콜을 지원하는 효율적이고 기능이 풍부한 최신 클라이언트 프로그래밍 툴킷을 제공하는 데 사용됩니다. HTTP 프로토콜 및 제안.

    특징:

    1. 표준 순수 Java 언어를 기반으로 합니다. Http1.0, Http1.1 구현

    2. 모든 HTTP 메소드(GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE)를 확장 가능한 객체지향 구조로 구현합니다.

    3. HTTPS 프로토콜을 지원합니다.

    4. HTTP 프록시를 통해 투명한 연결을 설정합니다.

    5. CONNECT 메소드를 사용하여 HTTP 프록시를 통해 터널링된 https 연결을 설정합니다.

    6. 기본, 다이제스트, NTLMv1, NTLMv2, NTLM2 세션, SNPNEGO/Kerberos 인증 체계.

    7. 플러그인 사용자 정의 인증 체계.

    8. 휴대 가능하고 안정적인 소켓 팩토리를 사용하면 타사 솔루션을 더 쉽게 사용할 수 있습니다.

    9. 연결 관리자는 다중 스레드 애플리케이션을 지원합니다. 각 호스트에 대한 최대 연결 수 설정은 물론 최대 연결 수 설정을 지원하고 만료된 연결을 검색하고 닫습니다.

    10. Set-Cookie에서 쿠키를 자동으로 처리합니다.

    11. 플러그인 맞춤형 쿠키 정책.

    12. 요청의 출력 스트림은 스트림의 콘텐츠를 소켓 서버로 직접 버퍼링하는 것을 방지할 수 있습니다.

    13. Response의 입력 스트림은 소켓 서버에서 직접 해당 콘텐츠를 효과적으로 읽을 수 있습니다.

    14. KeepAlive를 사용하여 http1.0 및 http1.1에서 지속적인 연결을 유지합니다.

    15. 서버에서 직접 보낸 응답 코드와 헤더를 가져옵니다.

    16. 연결 시간 초과를 설정하는 기능.
      사용방법

    HttpClient를 사용하여 요청을 보내고 응답을 받는 것은 매우 간단하며 일반적으로 다음 단계가 필요합니다.

    1. HttpClient 객체를 생성합니다.

    2. 요청 메소드의 인스턴스를 생성하고 요청 URL을 지정합니다. GET 요청을 보내야 하는 경우 HttpGet 개체를 만들고, POST 요청을 보내야 하는 경우 HttpPost 개체를 만듭니다.

    3. 요청 매개변수를 보내야 하는 경우 HttpGet 및 HttpPost에 공통된 setParams(HetpParams params) 메서드를 호출하여 HttpPost 개체에 대한 요청 매개변수를 추가할 수 있으며 setEntity(HttpEntity 엔터티) 메서드를 호출할 수도 있습니다. 요청 매개변수를 설정합니다.

    4. HttpClient 객체의 실행(HttpUriRequest request)을 호출하여 요청을 보냅니다. 이 메서드는 HttpResponse를 반환합니다.

    5. HttpResponse의 getAllHeaders(), getHeaders(String name) 및 기타 메서드를 호출하여 서버의 응답 헤더를 가져옵니다. HttpResponse의 getEntity() 메서드를 호출하여 서버의 응답 콘텐츠를 래핑하는 HttpEntity 객체를 가져옵니다. 프로그램은 이 개체를 통해 서버의 응답 내용을 얻을 수 있습니다.

    6. 연결을 해제하세요. 실행 방법의 성공 여부에 관계없이 연결을 해제해야 합니다

    2), HttpURLConnection
    사진을 찾아보세요

    3) okhttp
    온라인에서 검색하고 구문 분석할 수 있지만 이동하지는 않습니다.

    여기서 한 가지 말씀드릴 점은, Android 2.3 이상 버전에서는 HttpURLConnection을, Android 2.2 이하 버전에서는 HttpClient를 사용해 보세요.
    왜냐하면:
    HttpClient
    DefaultHttpClient와 그 형제인 AndroidHttpClient는 둘 다 HttpClient의 특정 구현 클래스이며 둘 다 많은 API를 갖고 있으며 구현이 비교적 안정적이며 버그 수가 매우 많습니다. 작은.
    그러나 동시에 HttpClient의 API 수가 많기 때문에 호환성을 훼손하지 않고 업그레이드하고 확장하기가 어렵습니다. 따라서 Android 팀은 현재 HttpClient를 개선하고 최적화하는 데 적극적이지 않습니다.
    HttpURLConnection
    HttpURLConnection은 HTTP 작업을 수행하는 데 사용할 수 있는 다목적의 경량 HTTP 클라이언트이며 대부분의 애플리케이션에 적합합니다. HttpURLConnection에서 제공하는 API는 상대적으로 간단하지만 사용 및 확장도 더 쉽습니다.
    그러나 Android 2.2 이전에는 HttpURLConnection에 항상 성가신 버그가 있었습니다. 예를 들어, 읽기 가능한 InputStream에서 close() 메서드가 호출되면 연결 풀이 실패할 수 있습니다. 그렇다면 우리의 일반적인 해결책은 연결 풀 기능을 직접 비활성화하는 것입니다

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:47:01

    차이가 너무 커서 확장하려면 시간이 많이 걸릴 것 같으니 간단히만 얘기해보겠습니다.

    HttpClient는 Java 세계에서 뛰어난 HTTP 클라이언트 툴킷이므로 처음에는 Android에서도 지원에 포함되어 모든 사람이 편리하게 HTTP 요청을 할 수 있기를 바랍니다. 그러나 Android에 원래 포함된 것은 HttpClient의 베타 버전이었으며, 이로 인해 이후 Android에서 HttpClient를 사용하면 버그가 가득했습니다. Android 엔지니어들은 이 문제를 해결할 의도가 없어 보였고 심지어 이후 프레임워크에서 HttpClient를 쫓아냈기 때문에 Android에서 HttpClient를 사용하는 것은 기본적으로 권장되지 않습니다.

    Android가 HttpClient를 기꺼이 포기하는 이유는 무엇인가요? 중요한 이유는 HttpURLConnection 사용을 선호한다는 것입니다. HttpURLConnection은 Java API 범주에 속하며 HttpClient와 같은 타사 라이브러리에 비해 Google에서 직접 제어하기가 더 쉽습니다. 그러나 HttpURLConnection의 캡슐화는 상대적으로 간단하고 HTTP 요청 처리 수준이 상대적으로 낮기 때문에 사용하기가 특별히 편리하지 않습니다.

    OkHttp는 HttpClient와 유사하며 타사 라이브러리이기도 합니다. 그러나 패키징은 상대적으로 높은 수준이므로 사용하기가 더 간단하고 쉽습니다. 또한 Android에 대한 전용 지원이 있어 HttpClient와 같은 미완성 프로젝트보다 훨씬 좋습니다.

    회신하다
    0
  • 취소회신하다