我們定義在我們的Java應用程序中的自定義HTTP用戶代理包含以下內容:如何從Java Web Start應用程序設置默認HTTP用戶代理?
- 軟件版本
- 用戶語言
- 平臺的信息(系列操作系統+版本名稱)
- 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文件,因爲它無法確定客戶的信息(用戶語言+平臺)。
我認爲Java的代理函數對我們來說並不是真正的選擇,因爲我們已經將它們用於代理目的。我懷疑代理兩次是一個好主意。 –
@DirkStöcker和你的問題一樣嗎? –
相同的軟件,我維護者:-) –