Java アプリケーションで、以下を含むカスタム HTTP User-Agent を定義します。
- ソフトウェアバージョン
- ユーザー言語
- プラットフォーム情報 (オペレーティング システム ファミリ + リリース名)
- Java バージョン
このユーザー エージェントは、アプリケーションによって作成されたすべての HTTP 接続に適用されます。これには、手動で開くものも含まれますが、JRE によって自動的に作成されるものも含まれます。たとえば、JEditorPane
HTML コード内で参照される外部画像を解決する場合などです。
このために、アプリケーションの起動時に"http.agent"
システム プロパティをポイント 1/2/3 に設定します ( JRE が Java バージョンを自動的に追加できるようにします)。
System.setProperty("http.agent", Version.getAgentString());
これは、Java Web Start からではなく、jar からアプリケーションを実行する場合にうまく機能します。
回避策として、完全な User-Agent を手動で作成した接続に手動で設定します。
public static HttpURLConnection openHttpConnection(URL httpURL) throws IOException {
HttpURLConnection connection = (HttpURLConnection) httpURL.openConnection();
connection.setRequestProperty("User-Agent", Version.getFullAgentString());
return connection;
}
ただし、これは接続が JRE によって作成されるケースを処理しません (JEditorPane の例)。
この場合、ユーザー エージェントをどのように設定できますか?
この例sun.net.www.protocol.http.HttpURLConnection.userAgent
では、リフレクションを使用して の値を変更しようとしましたが、うまくいきません。IllegalAccessException
クライアント情報 (ユーザー言語 + プラットフォーム) を特定できないため、JNLP ファイルに User-Agent を設定することもできません。