从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