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 — етапом розбору.