ROME Feeds: プロキシは HTTP クライアントに持たせる
プロキシの経路とステータス処理は HTTP クライアントに任せ、そのストリームとコンテンツタイプを ROME の XML リーダーに渡します。
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);
}
現代的な import は com.rometools.rome.io.XmlReader と SyndFeedInput です。ここで body は受信した InputStream、contentType は HTTP Content-Type です。XmlReader は BOM、そのメタデータ、XML 宣言を考慮します。先に任意の charset でデコードすると、有用な証拠を捨ててしまうことがあります。
解析の前に HTTP ステータスを確認してください。そうしないと、プロキシのログインページや拒否が XML エラーとして現れることがあります。拒否された応答のボディも解放し、HTTP エラーがストリームを開いたままにしないようにします。
2 つのフィードソースが、呼び出しの間に JVM のプロキシプロパティを変更せずに、構成の異なるクライアントを使えます。各 HTTP クライアントが経路を持ち、ROME が解析の段階を持ちます。