1

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

我们想授权我们的驱动程序使用 Oauth 2 作为已安装的应用程序。在 windows xp、windows 7 x64、windows 7 x64 + RDP 上运行良好。但是在 Windows Server 2008 R2 + RDP 的测试平台上它失败了。

基本上,我们打开一个网络浏览器,他登录,我们捕捉到回复,并对用户进行身份验证。

这是网址打开的代码:

    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);
}

我想出的是:Bar​​eBonesBrowserLaunch 没有打开链接,FileProtocolHandler 也没有。

URL 长度略低于 250 个字符。

任何援助将不胜感激!

4

3 回答 3

3

使用java.net.HttpURLConnection

URL myURL = new URL("http://example.com/");
    URLConnection myURLConnection = myURL.openConnection();
    myURLConnection.connect();
于 2012-09-10T09:10:20.870 回答
1

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

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

于 2013-10-21T10:40:32.973 回答
1

这是一个不同角度的建议。(不确定这是否适合您)

您要解决的问题是使用 Oauth 2 和身份验证机制。而不是打开浏览器捕获其响应。已经有可用的库,如Apache amber ,它们纯粹在 java中执行此操作。

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

于 2012-09-10T10:52:23.237 回答