有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

“rundll32 URL.dll,FileProtocolHandler”的URL长度的java限制?

我有一个包含大量参数的长URL,我希望在Windows系统上使用Java在默认浏览器中打开这些参数

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

对于像“http://www.google.com”这样的短URL,这很好。但是对于长URL(比如说,2000个字符),这完全不起任何作用:没有例外或类似的情况,它只是被忽略

运行时是否有字符限制(a)。用于rundll32 url的exec命令或b)。dll命令?如果是,限制是什么


共 (4) 个答案

  1. # 1 楼答案

    您将遇到this (archived)操作系统/浏览器特定的最大URL长度问题:

    对于“rundll32 url.dll”(即Microsoft IE),您将被限制为2083个字符(包括http://)

    从我的角度来看,你有两种选择:

    1. 构建(或使用)TinyURL风格的服务 这会将您的长URL转换为 短的,重定向的。然而即使 在这里,你将遇到 相同的URL长度问题,仅在 浏览器本身,而不是您的 Runtime()语句。e、 g.浏览器窗口将打开,转到短URL,该URL将执行重定向到长URL并失败

    2. 使用POST请求并埋下一些或 中的所有URL参数 信息技术而不是打电话给你 可以提供很长的参数 在HTTP POST请求的主体内。这 不会像您的示例代码那样简单。事实上,对于rundll32 url来说,这可能相当棘手(或不可能)。dll组合(我不熟悉它)

  2. # 2 楼答案

    另一方面,我建议使用跨平台Desktop.open()Desktop.browse()而不是仅使用Windows rundll32。如果无法打开写应用程序,这将给您一个IOException

  3. # 3 楼答案

    您也可以尝试运行时。exec(字符串[])版本,您可能会更幸运地使用它。只需将所有空格分隔的参数作为单独的字符串传递:

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

  4. # 4 楼答案

    它还取决于windows的版本,因为您可能在命令行上超过了操作系统的MAX_PATH长度