从java打开URL

我们正在为bigquery编写一个开源的jdbc驱动程序,并遇到了以下问题:

我们想要将Oauth 2的驱动程序授权为已安装的应用程序。 在Windows XP,Windows 7 x64,Windows 7 x64 + RDP上它工作正常。 但是在Windows服务器2008 R2 + RDP的测试平台上它失败了。

基本上,我们打开一个Web浏览器,他登录,我们捕获回复,并validation用户。

这是url开放的代码:

private static void browse(String url) { // first try the Java Desktop logger.debug("First try the Java Desktop"); if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported(Action.BROWSE)) try { desktop.browse(URI.create(url)); return; } catch (IOException e) { // handled below } } // Next try rundll32 (only works on Windows) logger.debug("Try the rundll32"); try { Runtime.getRuntime().exec( "rundll32 url.dll,FileProtocolHandler " + url); return; } catch (IOException e) { // handled below } // Next try browsers logger.debug("Try with browsers"); BareBonesBrowserLaunch.openURL(url); } 

我想通了:BareBonesBrowserLaunch没有打开链接,FileProtocolHandler也没有。

URL长度略低于250字符。

任何援助将不胜感激!

使用java.net.HttpURLConnection

 URL myURL = new URL("http://example.com/"); URLConnection myURLConnection = myURL.openConnection(); myURLConnection.connect(); 

以下是从不同角度提出的建议。 (不确定这是否适合您)

您要解决的问题是使用Oauth 2和身份validation机制。 而不是打开浏览器捕获其响应。 已经有像Apache amber这样的库可以在java中完全实现

这是您可以参考的官方Amber示例 。

基本上听起来不错,但如果您想使用特定浏览器打开(如果系统中有多个浏览器),这是另一种方式

 String url = "http:/devmain.blogspot.com/"; String[] browsers = { "firefox", "opera", "mozilla", "netscape" }; // common browser names String browser = null; for (int count = 0; count < browsers.length && browser == null; count++) if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0) browser = browsers[count]; // have found a browser Runtime.getRuntime().exec(new String[] { browser, url }) // open using a browser 

更多细节: http : //devmain.blogspot.com/2013/10/java-how-to-open-url-in-browser.html