我可以使用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。
答案 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演示。