ROME Feeds: den Proxy beim HTTP-Client platzieren
Lassen Sie den HTTP-Client das Proxy-Routing und die Statusbehandlung übernehmen und reichen Sie dann seinen Stream und Content-Type an ROMEs XML-Reader weiter.
ROME parst die Feed-Bytes; die Proxy-Route und das Konto gehören zum HTTP-Client. Bei einem gewählten JDK HttpClient gehört ein fester Proxy auf dessen Builder:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example", 8080)))
.build();
Für einen erlaubten Test öffentlicher Feeds ohne Proxy-Authentifizierung ersetzen Sie Platzhalter-Host und -Port durch einen Kandidaten aus der HTTP-Proxy-Liste. Fügen Sie dem Client die Authentifizierung der Bereitstellung und Anfragegrenzen hinzu. Nachdem er eine akzeptable Antwort erhalten hat, übergeben Sie den Stream an ROME:
try (XmlReader reader = new XmlReader(body, contentType)) {
SyndFeed feed = new SyndFeedInput().build(reader);
}
Die modernen Imports sind com.rometools.rome.io.XmlReader und SyndFeedInput. Hier ist body der empfangene InputStream und contentType der HTTP Content-Type. XmlReader berücksichtigt die BOM, diese Metadaten und die XML-Deklaration. Wer zuerst mit einem beliebigen Charset dekodiert, kann nützliche Hinweise verwerfen.
Prüfen Sie den HTTP-Status vor dem Parsen. Sonst kann eine Proxy-Anmeldeseite oder eine Ablehnung als XML-Fehler erscheinen. Geben Sie auch bei abgelehnten Antworten den Body frei, damit ein HTTP-Fehler den Stream nicht offen lässt.
Zwei Feed-Quellen können unterschiedlich konfigurierte Clients nutzen, ohne zwischen Aufrufen JVM-Proxy-Eigenschaften zu verändern. Jeder HTTP-Client besitzt seine Route, während ROME den Parsing-Schritt besitzt.