ROME Feeds: поместите прокси в HTTP-клиент
Пусть HTTP-клиент отвечает за маршрутизацию через прокси и обработку статуса, а затем передайте его поток и тип содержимого XML-читателю ROME.
ROME разбирает байты ленты; маршрут через прокси и учётная запись должны принадлежать HTTP-клиенту. Для выбранного JDK HttpClient фиксированный прокси задаётся в его builder:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example", 8080)))
.build();
Для разрешённого теста публичной ленты без аутентификации прокси замените хост и порт-заглушки кандидатом из списка HTTP-прокси. Добавьте в этот клиент аутентификацию развёртывания и ограничения запросов. После получения приемлемого ответа передайте поток в ROME:
try (XmlReader reader = new XmlReader(body, contentType)) {
SyndFeed feed = new SyndFeedInput().build(reader);
}
Современные импорты — com.rometools.rome.io.XmlReader и SyndFeedInput. Здесь body — полученный InputStream, а contentType — HTTP Content-Type. XmlReader учитывает BOM, эти метаданные и объявление XML. Предварительное декодирование произвольным charset может отбросить полезные свидетельства.
Проверьте статус HTTP перед разбором. Иначе страница входа прокси или отказ могут выглядеть как ошибка XML. Освобождайте тела и для отклонённых ответов, чтобы ошибка HTTP не оставляла поток открытым.
Два источника ленты могут использовать по-разному настроенные клиенты, не меняя свойства прокси JVM между вызовами. Каждый HTTP-клиент владеет своим маршрутом, а ROME — этапом разбора.