2013-04-17 58 views
7

我們定義在我們的Java應用程序中的自定義HTTP用戶代理包含以下內容:如何從Java Web Start應用程序設置默認HTTP用戶代理?

  1. 軟件版本
  2. 用戶語言
  3. 平臺的信息(系列操作系統+版本名稱)
  4. Java版本

我們希望這個用戶代理適用於由應用程序創建的所有HTTP連接,包括那些我們手動打開,還有那些汽車例如,當一個JEditorPane解決了HTML代碼中引用的外部圖像時,它由JRE創建。

對於這一點,我們在我們的應用程序的啓動設置"http.agent"系統屬性點1/2/3(讓JRE add by itself the Java version):

System.setProperty("http.agent", Version.getAgentString()); 

這個偉大的工程,當我們運行從一罐應用,但不是來自Java Web Start。

作爲一種變通方法,我們手動我們充分的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的例子)創建的連接的情況。

在這種情況下,我們如何設置用戶代理?

我們嘗試使用反射with this example更改sun.net.www.protocol.http.HttpURLConnection.userAgent的值,但它不起作用,我們正面臨着IllegalAccessException

我們不能沒有設置用戶代理在JNLP文件,因爲它無法確定客戶的信息(用戶語言+平臺)。

回答

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代理您的應用程序中,然後告訴您的應用程序使用,代理代碼,然後作爲唯一一個知道如何出去,幫助將附加的報頭字段。

+0

我認爲Java的代理函數對我們來說並不是真正的選擇,因爲我們已經將它們用於代理目的。我懷疑代理兩次是一個好主意。 –

+0

@DirkStöcker和你的問題一樣嗎? –

+0

相同的軟件,我維護者:-) –

相關問題