使用Java更改操作系统代理设置

3

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

我正在尝试使用:

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个回答

1
虽然大多数语言不允许(或者不鼓励)通过程序更改环境变量,但你可以使用Java中的JNI通过setenv()ProcessBuilder()实现。
但是为什么要从程序中更改每个人的东西呢?相反,应该在程序上下文中更改变量,例如设置代理服务器,这样它只对程序运行时上下文有效。这就是应用程序的设计和编程方式。
以下是一个例子,脱口而出。
 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);
        }
    }

注意:再次强烈反对从您的程序中更改环境变量的做法,而是仅为您的上下文设置所需的变量。

谢谢你的回答。我需要它用于我的浏览器(Chrome/Firefox)。我需要更改系统代理,这会影响我的浏览器。因此,我可以拥有可变的IP地址(某种程度上,我知道)。 - Domin1992

0
不,这样做是行不通的。这些只是你的应用程序可以使用的属性。改变它们只会在你的应用程序的上下文中改变值,而不会影响计算机本身。
通常情况下,你可以将一个“代理”对象传递给可能需要它的调用,就像这个post演示的那样。

我已经尝试过了,但它不符合我的项目要求。 - Domin1992

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接