httpURLConnection против Apache Commons http - PullRequest
6 голосов
/ 17 мая 2010

Я просто хотел узнать, есть ли у кого-нибудь из вас проблемы с использованием класса HttpURLConnection java по умолчанию. Некоторая ошибка, из-за которой вы переключаетесь на Apache Commons.

Или это просто (уродливый) интерфейс, предоставляемый классом, который оправдывает рождение стороннего http lib?

Раскрытие информации : Я слышал некоторые аргументы против серьезных проблем с java.net, но мне трудно поверить, что у класса, который является частью дистрибутива java core, после нескольких выпусков JDK

Ответы [ 3 ]

4 голосов
/ 20 сентября 2013

В Android SDK указано Предпочитают HttpURLConnection для нового кода .

Android включает в себя два HTTP-клиента: HttpURLConnection и Apache HTTP Client. Оба поддерживают HTTPS, потоковую загрузку и скачивание, настраиваемые тайм-ауты, IPv6 и пул соединений. Apache HTTP клиент имеет меньше ошибок в Android 2.2 (Froyo) и более ранних выпусках. За Android 2.3 (Gingerbread) и выше, HttpURLConnection является лучшим выбор. Его простой API и небольшой размер отлично подходят для Android. Прозрачное сжатие и кэширование ответов сокращают использование сети, улучшить скорость и сэкономить заряд батареи. См. Блог разработчиков Android для сравнение двух HTTP-клиентов.

4 голосов
/ 17 мая 2010

То, что приводит меня к Apache HttpClient,

  1. Поддержка багги.
  2. Обработка печенья.

Вы должны использовать HttpClient 4 (Apache HTTP Components) сейчас.

РЕДАКТИРОВАТЬ: Первая проблема обсуждалась здесь несколько раз. См

HttpURLConnection.getResponseCode () возвращает -1 при втором вызове

HttpURLConnection: Что за необходимость читать весь ответ?

Несмотря на то, что проблема на Android выглядит хуже, мы точно видели проблемы на J2SE.

0 голосов
/ 18 мая 2010

... но мне трудно поверить, что класс, являющийся частью дистрибутива ядра Java, все еще имеет проблемы после нескольких выпусков JDK.

В защиту Солнца они оказываются между камнем и наковальней:

  • Если они решат эти проблемы, они, несомненно, сломают десятки тысяч устаревших приложений, которые зависят от текущих API и их неидеального поведения. Если бы они сделали это, последствия от их платящей клиентской базы были бы огромными. И все больше предприятий застрянет, используя древние выпуски JDK.

  • Если они не решат проблему, они получат бесконечную критику от пуристов, которые считают, что каждая проблема должна быть решена, и чертовской совместимости.

По крайней мере, людям, которым нужен HTTP-клиент API, есть лучшая альтернатива ... если они захотят использовать его.


Вот причина, по которой @deprecated был изобретен.

Теоретически да ...

Однако на практике устаревание используется Oracle как сильный сигнал для программистов (и, что более важно, менеджеров), что им необходимо изменить свой код.

Это не гарантировано здесь. Давайте посмотрим на конкретные вопросы:

  • "HttpURLConnection не может обрабатывать cookie-файлы" не является причиной для его отмены. Люди, которые уже создали приложения против HttpURLConnection, уже сталкивались с этой проблемой. Для них переход на другой HTTP-класс клиента ненужный труд.

  • "HttpURLConnection не поддерживает keep-alives" также не является причиной для осуждения. Большинству приложений не требуется keep-alives.

и т. Д.

Устаревание является тупым инструментом, и философия Sun / Oracle заключается в том, что его следует использовать только в тех случаях, когда API трудно использовать безопасно ; т. е. когда есть веское экономическое обоснование для разработчиков, тратящих время на переработку кода, и так далее.

Но не просто поверьте мне на слово. Посмотрите на случаи, когда Sun / Oracle имеет устаревшие методы и классы. Существует четкая закономерность, даже если есть исторические исключения.

...