2008-10-28 78 views
4

我有很長的URL與噸的參數,我想從Java Windows系統的默認瀏覽器打開使用「rundll32 url.dll,FileProtocolHandler」的URL長度限制?

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url) 

對於喜歡「http://www.google.com」這工作正常短網址。但對於較長的網址(例如2000個字符),這完全沒有任何意義:沒有例外或類似的東西,它只是被忽略。

對於Runtime.exec命令或b)rundll32 url.dll命令是否存在字符限制a)?如果是這樣,限制是什麼?

回答

1

你會反對this操作系統/瀏覽器特定的最大URL長度問題進行運轉起來:

對於 「RUNDLL32 URL.DLL」(即微軟IE瀏覽器),你將被限制爲2,083個字符(包括http:// )。

從我坐你有兩種選擇:

  1. 生成(或使用),將您的長URL轉換成 短,重定向的人一個TinyURL的式服務 。但是即使在 這裏您也會碰到同樣的URL長度問題 ,只是在 瀏覽器本身而不是您的 Runtime()語句中。例如瀏覽器窗口將打開,轉到短URL,它將執行重定向到long-URL並失敗。

  2. 使用POST請求並將其中的一些或 的所有URL參數埋在 之內。您可以在HTTP POST請求的主體內提供非常長的參數 ,而不是使用GET調用。這個 不會像你的示例代碼那麼簡單。事實上,這也許相當棘手的(或不可能)與RUNDLL32 URL.DLL組合(我不熟悉)...

0

這也將取決於Windows版本,因爲你可能會超過操作系統的命令行上的長度爲MAX_PATH

0

你也可以嘗試Runtime.exec(String [])版本,你可能會有更好的運氣。只要把你的所有空間分隔的參數,並通過他們作爲單獨的字符串:

Runtime.getRuntime().exec(new String [] {"rundll32", "url.dll,FileProtocolHandler", "urlarg1", "urlarg2"});

1

順便說一句,我建議僅適用於Windows rundll32的使用跨平臺Desktop.open()Desktop.browse()代替。如果無法打開寫入應用程序,這會給你一個IOException。