使用java修改操作系统代理设置



我可以使用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,我有以前的

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

但是为什么你要为你的程序中的每个人改变一些东西呢?相反,更改程序上下文中的变量,例如设置代理服务器,以便它仅对程序运行时上下文中有效。这就是应用程序应该如何设计和编程。

这是一个例子,off the top of head

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

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

不行,这行不通。这些只是你的应用程序可以使用的属性。改变它们只会改变你的应用程序上下文中的值,而不是计算机。

你通常可以将Proxy对象传递给可能需要它的调用,如这篇文章所示。

最新更新