4

WindowsシステムのJavaからデフォルトのブラウザで開きたいパラメータがたくさんある長いURLがあります。

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

「 http://www.google.com 」のような短いURLの場合、これは問題なく機能します。ただし、長いURL(たとえば、2000文字)の場合、これはまったく何もしません。例外などはなく、単に無視されます。

a)Runtime.execコマンドまたはb)rundll32 url.dllコマンドの文字数制限はありますか?もしそうなら、制限は何ですか?

4

4 に答える 4

2

この (アーカイブされた)オペレーティング システム/ブラウザー固有の最大 URL 長の問題に直面することになります。

"rundll32 url.dll" (つまり、Microsoft IE) の場合、2,083 文字 (http:// を含む) に制限されます。

私が座っているところから、2 つの選択肢があります。

  1. 長い URL をリダイレクトされた短い URL に変換する TinyURL スタイルのサービスを構築 (または使用) します。ただし、ここでも、Runtime() ステートメントではなくブラウザー自体の中で、同じ URL の長さの問題に遭遇します。たとえば、ブラウザ ウィンドウが開き、短い URL に移動すると、長い URL へのリダイレクトが実行されて失敗します。

  2. POST リクエストを使用して、その中に URL パラメーターの一部またはすべてを埋め込んでください。GET 呼び出しを使用する代わりに、HTTP POST 要求の本文内で非常に長いパラメーターを指定できます。これは、サンプル コードほど単純ではありません。実際、これはrundll32 url.dllの組み合わせでは非常に難しい(または不可能)かもしれません(私はそれに慣れていません)...

于 2008-10-28T09:41:11.320 に答える
2

余談ですが、クロス プラットフォームを使用するDesktop.open()Desktop.browse()、Windows のみの代わりに使用することをお勧めしますrundll32。これにより、書き込みアプリケーションを開くことができない場合、IOException が発生します。

于 2008-11-19T12:12:25.070 に答える
0

また、Runtime.exec(String []) バージョンを試すこともできます。スペースで区切られたすべての引数を取得し、それらを個別の文字列として渡します。

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

于 2008-10-29T20:56:11.707 に答える
0

MAX_PATHコマンドラインでオペレーティングシステムの長さを超えている可能性があるため、Windowsのバージョンにも依存しますか?

于 2008-10-28T18:36:25.623 に答える