0

我需要从 Java 代码打开浏览器。我知道这可以按如下方式完成:

java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://google.com"));

但我也需要浏览器使用某些代理设置。(即当浏览器打开时,它的代理设置必须设置为某些值。)我尝试使用以下代码,但它不起作用:

public static void main(String asf[]){
    System.setProperty("java.net.useSystemProxies", "true");
    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8080");
    try {
        java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://google.com"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("done");
}

使用从命令行设置代理

 java -Dhttp.proxyHost=webcache.example.com -Dhttp.proxyPort=8080

不是我的选择。我如何做到这一点?

4

2 回答 2

0

您的代码在很大程度上是正确的,它处理设置代理,但如果它不起作用,还有另一种通过 Java 代码设置代理的方法,即通过代理类。

SocketAddress addr = new InetSocketAddress("socks.example.com", 1080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);
Socket socket = new Socket(proxy);
InetSocketAddress dest = new InetSocketAddress("server.example.org", 1234);
socket.connect(dest);

在这里,套接字将尝试通过指定的 SOCKS 代理连接到其目标地址(server.example.org:1234)。

有关更多详细信息,您可以阅读Standard Java Documentation for Proxies

通过添加检查可以改进您打开浏览器的解决方案

if(Desktop.isDesktopSupported())
{
  Desktop.getDesktop().browse(new URI("http://www.google.com"));
}

这是您的解决方案的补充....也许您可以将其称为另一种方式

try    { 
    Process p=Runtime.getRuntime().exec("cmd /c start http://www.google.com"); 
} 
catch(IOException e1) {
    System.out.println(e1);
} 
于 2013-06-06T09:19:46.990 回答
0

谷歌浏览器代理开关在这里很有用。我们可以为目标包含开关 --proxy-server=127.0.0.1:8080 的 chrome 浏览器创建一个快捷方式。现在可以使用 Runtime 类的 exec 方法从 java 代码中打开这个快捷方式。exec 的参数将是 "cmd /c start /d \"d:\" chrome.lnk" 其中 d: 是我的快捷方式的路径。可以在此处找到此技术的详细说明http://sleepingthreads.blogspot.in/2013/07/open-browser-with-proxy-settings-set.html

请注意,Google 声明不建议使用开关。因此,仅将其用作临时解决方案。

于 2013-07-07T07:49:23.053 回答