使用java更改OS代理设置

时间:2015-05-29 18:32:13

标签: java eclipse windows-7

我可以使用java应用程序在Windows 7中设置/更改代理设置吗?

我正在尝试使用:

public static void setProxy(String proxyUrl, String proxyPort){
    System.getProperties().put("proxySet", "true");
    System.getProperties().put("http.proxyHost", proxyUrl);
    System.getProperties().put("http.proxyPort", proxyPort);
}

但是在运行后我的设置没有改变,我拥有与以前相同的IP。

2 个答案:

答案 0 :(得分:1)

尽管大多数语言不允许(或)不鼓励通过程序更改环境变量,但您可以使用setenv()并使用ProcessBuilder()在Java中使用JNI实现此目的。

但是你为什么要为你的程序中的每一个改变一些东西?而是更改程序上下文中的变量,例如设置代理服务器,使其仅对程序运行时上下文有效。这就是应用程序的设计和编程方式。

这是一个例子,不在头顶。

 public static void main(String[] args) throws Exception
    {
        ProcessBuilder processBuilder = new ProcessBuilder("CMD.exe", "/C", "SET");
        processBuilder.redirectErrorStream(true);
        Map<String,String> environment = processBuilder.environment();

        //Set the new envrionment varialbes here
        environment.put("proxySet", "true");
        environment.put("http.proxyHost", proxyUrl);
        environment.put("http.proxyPort", proxyPort);

        Process process = processBuilder.start();
        BufferedReader inputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String dataLog=null;
        while ((dataLog = inputReader.readLine()) != null)
        {
            //Just to see what's going on with process
            System.out.println(dataLog);
        }
    }

注意:同样,不鼓励从程序中更改环境变量的做法,而是仅为您的上下文设置所需的变量。

答案 1 :(得分:0)

不,这不起作用。这些只是您的应用可以使用的属性。更改它们只会在应用程序的上下文中更改值,而不是计算机。

您通常可以将Proxy对象传递给可能需要它的调用,例如此post演示。