Ограничение длины URL-адреса для "rundll32 url.dll, FileProtocolHandler"? - PullRequest
4 голосов
/ 28 октября 2008

У меня есть длинный URL с множеством параметров, которые я хочу открыть в браузере по умолчанию из Java в системе Windows, используя

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

Для коротких URL-адресов, таких как "http://www.google.com", это прекрасно работает. Но для длинных URL-адресов (скажем, 2000 символов) это просто абсолютно ничего не делает: никаких исключений или чего-либо подобного, они просто игнорируются.

Есть ли ограничение символов а) для команды Runtime.exec или б) для команды rundll32 url.dll? Если да, то каков предел?

Ответы [ 4 ]

2 голосов
/ 19 ноября 2008

Кроме того, я бы предложил использовать кроссплатформенный Desktop.open() или Desktop.browse() вместо только Windows rundll32. Это даст вам IOException, если он не сможет открыть приложение записи.

2 голосов
/ 28 октября 2008

Вы будете работать с этой проблемой максимальной длины URL, специфичной для операционной системы / браузера:

Для "rundll32 url.dll" (т.е. Microsoft IE) вы будете ограничены 2 083 символами (включая http://).

)

С того места, где я сижу, у вас есть две альтернативы:

  1. Создание (или использование) сервиса в стиле TinyURL это превращает ваши длинные URL-адреса в короткие, перенаправленные. Однако даже здесь вы столкнетесь с та же проблема длины URL, только в пределах сам браузер, а не ваш Оператор выполнения (). например Откроется окно браузера, перейдите по короткому URL-адресу, который выполнит перенаправление на длинный URL-адрес, и произойдет сбой.

  2. Используйте запрос POST и похороните некоторые или все ваши параметры URL в пределах Это. Вместо того, чтобы с помощью GET позвонить вам может поставлять очень длинные параметры в теле HTTP-запроса POST. это не будет так просто, как ваш пример кода. На самом деле это может быть довольно сложно (или невозможно) с комбинацией rundll32 url.dll (я не знаком с ней) ...

0 голосов
/ 29 октября 2008

Вы также можете попробовать версию Runtime.exec (String []), с которой вам может повезти больше. Просто возьмите все аргументы, разделенные пробелом, и передайте их в виде отдельных строк:

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

0 голосов
/ 28 октября 2008

Это также будет зависеть от версии Windows, потому что вы можете превысить MAX_PATH длину операционной системы в командной строке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...