7

Java アプリケーションで、以下を含むカスタム HTTP User-Agent を定義します。

  1. ソフトウェアバージョン
  2. ユーザー言語
  3. プラットフォーム情報 (オペレーティング システム ファミリ + リリース名)
  4. Java バージョン

このユーザー エージェントは、アプリケーションによって作成されたすべての HTTP 接続に適用されます。これには、手動で開くものも含まれますが、JRE によって自動的に作成されるものも含まれます。たとえば、JEditorPaneHTML コード内で参照される外部画像を解決する場合などです。

このために、アプリケーションの起動時に"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 を設定することもできません。

4

1 に答える 1

1

開始されたアプリケーションではなく、JNLP ファイルからのみシステム プロパティを設定できます。これを行う方法については、http://docs.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/syntax.htmlを参照してください。

残念ながら、あなたが興味を持っているデータはその時点では入手できないようです。

アプリケーションによっては、新しいプロキシ機能を使用して接続を確立できる場合があります。 http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

極端な解決策は、アプリケーション内で独自の http プロキシを実行し、アプリケーションにそれを使用するように指示することです。プロキシ コードは、ヘッダー フィールドを追加して、抜け出す方法を知っている唯一のプロキシ コードです。

于 2013-04-21T19:58:26.683 に答える