我可以使用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
对象传递给可能需要它的调用,如这篇文章所示。