【问题标题】:Limit for URL length for "rundll32 url.dll,FileProtocolHandler"?“rundll32 url.dll,FileProtocolHandler”的 URL 长度限制?
【发布时间】:2010-09-19 13:06:01
【问题描述】:

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

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

对于像“http://www.google.com”这样的短网址,这可以正常工作。但是对于长 URL(比如 2000 个字符),这根本就没有任何作用:没有例外或类似的东西,它只是被忽略了。

a) Runtime.exec 命令或 b) rundll32 url.dll 命令是否有字符限制?如果有,限制是多少?

【问题讨论】:

    标签: java windows url


    【解决方案1】:

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

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

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

    1. 构建(或使用)TinyURL 风格的服务 把你的长网址变成 简短的,重定向的。然而即使 在这里你会遇到 相同的 URL 长度问题,就在 浏览器本身而不是您的 运行时()语句。例如浏览器窗口将打开,转到将执行重定向到长 URL 的短 URL 并失败。

    2. 使用 POST 请求并掩埋一些或 您的所有 URL 参数 它。而不是使用 GET 调用你 可以提供很长的参数 在 HTTP POST 请求的正文中。这 不会像您的示例代码那么简单。事实上,这对于 rundll32 url.dll 组合可能非常棘手(或不可能)(我不熟悉它)......

    【讨论】:

      【解决方案2】:

      顺便说一句,我建议使用跨平台Desktop.open()Desktop.browse() 而不是仅Windows rundll32。如果它无法打开写入应用程序,这会给你一个 IOException。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          这也取决于windows的版本,因为你可能在命令行上超过了操作系统的MAX_PATH长度?

          【讨论】:

            猜你喜欢
            • 2012-10-14
            • 2015-11-22
            • 2012-12-01
            • 2016-07-10
            • 2010-10-17
            • 1970-01-01
            • 2020-03-23
            • 2011-05-15
            • 2022-06-17
            相关资源
            最近更新 更多