2010-05-17 7 views
6

자바 기본 HttpURLConnection 클래스를 사용하여 문제가 발생했는지 알고 싶었습니다. 아파치 공유지로 바꾸는 버그가 있습니다.httpURLConnection vs apache commons http

아니면 클래스는 그 제 3 자에 http lib 디렉토리의 탄생을 정당화 노출 단지 (추한) 인터페이스입니다?

공개 : 나는 몇 가지 심각한 문제가 java.net에 대한 몇 가지 인수를 들었지만, 나는 자바 코어 배포판의 일부 클래스가 여전히 JDK

의 여러 버전 이후에 문제가 있다고 생각하기 어려운 찾는거야

답변

4

것들은 아파치 HttpClient를하다에

  1. 버기 연결 유지 지원 날 드라이브.
  2. 쿠키 취급.

당신은 HttpClient를 4 (아파치 HTTP 구성 요소) 지금을 사용해야합니다.

편집 : 첫 번째 문제는 여기에서 여러 번 논의되었습니다. 문제가 안드로이드에 더 악화 될 것으로 보인다 비록

HttpURLConnection: What's the deal with having to read the whole response?

HttpURLConnection.getResponseCode() returns -1 on second invocation

, 우리는 J2SE에 대한 정확한 문제를보고하십시오.

+0

버그가있는 연결 유지는 무엇을 의미합니까? 조금 더 구체적으로하실 수 있습니까? 답변 해주셔서 감사합니다! –

+0

내 편집보기 ........ –

+0

내가 이걸 볼 수 있는지 보자. 문제는 만약 당신이 전체 스트림을 읽지 않는다면, 다음 커넥션은 처음부터 쓰레기 (읽지 않은 데이터)를 얻는다는 것입니다. 이것은 URL 연결 간의 일부 스트림 공유 때문에 발생합니까? 감사합니다 ZZ –

0

...하지만 자바 코어 배포판의 일부인 클래스에는 몇 가지 JDK 릴리스 이후에도 여전히 문제가 있다고 생각합니다. 그들이이 문제를 해결하는 경우

  • 그들은 의심 할 여지없이 현재의 API에 의존하는 기존 응용 프로그램의 수만을 깰 것이다

    일의 방어에

, 그들은 바위와 힘든 곳이 사이 적발 그리고 그들의 덜 이상적인 행동. 그들이 그렇게했다면 고객 기반을 지불하는 의 악영향이 엄청날 것입니다. 고대 JDK 릴리스를 사용하면 더 많은 기업들이 갇힐 수 있습니다. 그들은 문제가 해결되지 않는 경우

  • , 그들은 모든 문제가 해결되어야한다고 생각하는 순수 주의자, 그리고 빌어 먹을 호환성에서 끝이 고사 포탄을 얻을.

  • 적어도 HTTP 클라이언트 API가 필요한 사용자는 더 나은 대안을 사용해야합니다. 왜 @deprecated 이유입니다


    가 발명되었다. 이론적으로

    , 그래 ...

    그러나, 실제로 중단은
    변화에 자신의 코드에 필요 것을 (더 중요하고, 관리자) 프로그래머에 강한 신호로 오라클에 의해 사용된다.

    여기에는 보증되지 않는 내용이 있습니다. 구체적인 문제를 살펴 봅시다 :

    • "HttpURLConnection 쿠키를 처리 할 수 ​​없습니다"를 중단 한 이유는 없습니다. 이미 HttpURLConnection에 대한 신청서를 작성한 사용자는 이미이 문제를 처리했을 것입니다. 그들을 위해, 다른 HTTP 클라이언트 클래스 불필요한 작업으로 변경하십시오.

    • "HttpURLConnection은 Keep-Alive를 지원하지 않습니다"는 그 이유 중 하나입니다. 대부분의 응용 프로그램에서는 연결 유지가 필요하지 않습니다.

    등등.

    deprecation은 무딘 도구이며 Sun/Oracle의 철학은 API를 사용하기가 어려울 경우에만 사용해야한다는 것입니다. ; 즉, 코드가 바뀌는 등 개발자가 시간을 보냈을 때 비즈니스 사례가 일 때

    그러나 내 말을 듣지 마십시오. Sun/Oracle 에서 사용되지 않는 메소드와 클래스가 인 사례를 살펴보십시오. 역사적인 예외가 있더라도 명확한 패턴이 있습니다.

    +1

    그게 왜 @deprecated가 발명 된 이유입니다. –

    4

    Android SDK says새 코드에 대해 HttpURLConnection을 선호합니다.

    Android에는 두 개의 HTTP 클라이언트 (HttpURLConnectionApache HTTP Client)가 있습니다. 둘 다 HTTPS, 스트리밍 업로드 및 다운로드, 구성 가능한 시간 초과, IPv6 및 연결 풀링을 지원합니다. Apache HTTP 클라이언트 은 Android 2.2 (Froyo) 및 이전 릴리스에서 더 적은 수의 버그가 있습니다. Android 2.3 (진저 브레드) 이상인 경우 HttpURLConnection은 최고 입니다. 간단한 API와 작은 크기로 인해 Android에 매우 적합합니다. 투명 압축 및 응답 캐싱은 네트워크 사용을 줄이고 은 속도를 향상시키고 배터리를 절약합니다. 두 HTTP 클라이언트를 비교하여 을 비교하려면 Android Developers Blog을 참조하십시오.

    +2

    이것은 대단한 답변이지만 안드로이드에만 적용되는지 궁금합니다. 그들은 다른 사람들이 사용하는 동일한 (오라클) JVM을 사용하지 않습니다. – dhalsim2

    관련 문제