我有一个很长的网址,我想在Windows系统上使用
从Java的默认浏览器中打开大量参数Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+url)
对于像“http://www.google.com”这样的简短网址,这很好用。但对于长URL(例如,2000个字符),这根本不做任何事情:没有异常或任何类型的东西,它只是被忽略。
对于Runtime.exec命令是否有字符限制a)或b)对于rundll32 url.dll命令?如果是这样,限制是什么?
答案 0 :(得分:2)
您将遇到this操作系统/浏览器特定的最大URL长度问题:
对于“rundll32 url.dll”(即Microsoft IE),您将被限制为2,083个字符(包括http://)。
从我坐的地方,您有两种选择:
构建(或使用)TinyURL式服务 这将你的长网址变成了 简短的,重定向的。甚至 在这里,你将遇到 相同的URL长度问题,就在内部 浏览器本身而不是你的 Runtime()语句。例如浏览器窗口将打开,转到短URL,该URL将执行重定向到长URL并失败。
使用POST请求并埋葬一些或 您的所有网址参数 它。而不是使用GET打电话给你 可以提供很长的参数 在HTTP POST请求的正文中。这个 不会像你的示例代码那么简单。事实上,对于rundll32 url.dll组合(我不熟悉),这可能相当棘手(或不可能)......
答案 1 :(得分:2)
顺便说一句,我建议使用跨平台Desktop.open()
或Desktop.browse()
而不是仅使用rundll32
。如果它无法打开写入应用程序,这将给你一个IOException。
答案 2 :(得分:0)
它还取决于Windows的版本,因为您可能在命令行上超出了操作系统的MAX_PATH
长度?
答案 3 :(得分:0)
你也可以试试Runtime.exec(String [])版本,你可能会有更好的运气。只需获取所有空格分隔的参数,并将它们作为单独的字符串传递:
Runtime.getRuntime().exec(new String [] {"rundll32", "url.dll,FileProtocolHandler", "urlarg1", "urlarg2"});