ROME Feeds: metti il proxy sul client HTTP
Lascia che il client HTTP gestisca l'instradamento del proxy e la gestione dello stato, poi passa il suo stream e il tipo di contenuto al lettore XML di ROME.
ROME analizza i byte del feed; la rotta proxy e l'account devono appartenere al client HTTP. Per un JDK HttpClient scelto, un proxy fisso va sul suo builder:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example", 8080)))
.build();
Per un test consentito di un feed pubblico senza autenticazione proxy, sostituisci host e porta segnaposto con un candidato dalla lista di proxy HTTP. Aggiungi al client l'autenticazione del deployment e i limiti delle richieste. Una volta ottenuta una risposta accettabile, consegna lo stream a ROME:
try (XmlReader reader = new XmlReader(body, contentType)) {
SyndFeed feed = new SyndFeedInput().build(reader);
}
Gli import moderni sono com.rometools.rome.io.XmlReader e SyndFeedInput. Qui body è l'InputStream ricevuto e contentType è l'HTTP Content-Type. XmlReader considera il BOM, quei metadati e la dichiarazione XML. Decodificare prima con un charset arbitrario può scartare prove utili.
Ispeziona lo stato HTTP prima dell'analisi. Altrimenti una pagina di accesso proxy o un rifiuto possono apparire come errore XML. Rilascia i body anche per le risposte rifiutate, così un errore HTTP non lascia aperto il suo stream.
Due sorgenti feed possono usare client configurati diversamente senza modificare le proprietà proxy della JVM tra le chiamate. Ogni client HTTP possiede la propria rotta, mentre ROME possiede la fase di analisi.