Java程序设置本地代理
思路(注意:此方法设置的代理,需重启浏览器才可生效)
通过bat脚本设置系统代理,然后在java中调用bat。
实现
1.Java调用bat
当我们需要在java程序中调用外部程序,我们可用通过Runtime.exec()调用来完成。
java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。
cmd /c dir 是执行完dir命令后关闭命令窗口。 cmd /k dir 是执行完dir命令后不关闭命令窗口。
cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。
cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。
例子:
import java.io.IOException;
import java.io.InputStream;public class callbat {public static void main(String args[]){callCmd("C:/run.bat");}public static void callCmd(String locationCmd){try {Process child = Runtime.getRuntime().exec(locationCmd);InputStream in = child.getInputStream();int c;while ((c = in.read()) != -1) {System.out.println((char)c);}in.close();try {child.waitFor();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("done");} catch (IOException e) {e.printStackTrace();}}}
关于java调用外部程序需要注意的事项
1. 当调用的外部命令中包含重定向(<、>),管道( | ) 命令时,exec(String command)的版本不能正确解析重定向、管道操作符。所以需要使用exec(String [] cmdArray)。
2.永远要在调用waitFor()方法之前读取数据流
永远要先从标准错误流中读取,然后再读取标准输出流
3.在exec()后 立即调用waitFor()会导致进程挂起。
2.bat脚本设置代理
在这里因为要要实现代理的动态变化,所以将bat内容放到了java代码中,每次生成对应的bat,运行,然后删除。如下:
public static boolean setProxy(String ip, String port){String code = "@echo off\r\n"+ "set ip=" + ip + "\r\n"+ "set port=" + port + "\r\n"+ "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\\Connections\" /v \"DefaultConnectionSettings\" /t REG_BINARY /d \"3C000000AA0100000B0000000F000000\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyEnable\" /t REG_DWORD /d \"1\" /f\r\n"+ "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyServer\" /t REG_SZ /d \"%ip%:%port%\" /f\r\n" + "REG ADD \"HKLM\\System\\CurrentControlSet\\Hardware Profiles\\0001\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyEnable\" /t REG_DWORD /d \"1\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\\Connections\" /v \"SavedLegacySettings\" /t REG_BINARY /d \"3C000000AE0100000B0000000F000000\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyOverride\" /t REG_SZ /d \"<local>\" /f\r\n" + "set rp=\"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\"\r\n"+ "set rk=\"ProxyServer\"\r\n"+ "for /f \"tokens=*\" %%a in ('reg query %rp% /v %rk%^|findstr %rk%') do (\r\n"+ "call :doit %%a\r\n"+ ")\r\n"+ "goto :eof\r\n"+ ":doit\r\n"+ "echo %3\r\n"+ "echo.&echo.\r\n"+ "exit";return runBat(code,ip+":"+port);}public static void removeProxy(){String code = "@echo off\r\n"+ "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\\Connections\" /v \"DefaultConnectionSettings\" /t REG_BINARY /d \"3C000000AA0100000B0000000F000000\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyEnable\" /t REG_DWORD /d \"0\" /f\r\n"+ "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyServer\" /t REG_SZ /d \"\" /f\r\n" + "REG ADD \"HKLM\\System\\CurrentControlSet\\Hardware Profiles\\0001\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyEnable\" /t REG_DWORD /d \"1\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\\Connections\" /v \"SavedLegacySettings\" /t REG_BINARY /d \"3C000000AE0100000B0000000F000000\" /f\r\n" + "REG ADD \"HKCU\\SOFTWARE\\MICROSOFT\\Windows\\CURRENTVERSION\\Internet Settings\" /v \"ProxyOverride\" /t REG_SZ /d \"<local>\" /f\r\n" + "exit";runBat(code,"");}private static boolean runBat(String code,String flag){File file = new File("temp.bat");String str = "";try {if(!file.exists()) file.createNewFile();PrintWriter pw = new PrintWriter(file);pw.write(code);pw.flush();pw.close();Process child = Runtime.getRuntime().exec("cmd /c temp.bat");InputStream in = child.getInputStream();Scanner sc = new Scanner(in,"gbk");while(sc.hasNext()){str += sc.nextLine();}try {child.waitFor();} catch (InterruptedException e) {e.printStackTrace();}sc.close();Thread.sleep(1000);file.delete();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}if(str.contains(flag)) return true;else return false;}
上面包括了删除代理的方法,在最后的时候,检测了是否设置成功,返回对应的结果。
完毕。
文章参考:[批处理]自动设置本机系统代理服务器
如果能帮到你,请右上角点个赞哦。
Java程序设置本地代理相关推荐
- 为诺基亚S40手机添加java程序的cmwap代理配置!
很多用诺基亚S40手机的朋友会发现这样一个问题,只要使用cmwap接入点,不论网络怎样设置,有些java程序就是不能联网,比如Opera Mini和英文版的Google Maps,而使用cmnet就可 ...
- java程序设置jvm_Java程序员应在2018年学习的3种JVM语言
java程序设置jvm 如果您是Java程序员,并且想学习更多的编程语言以扩展您的知识和技能,但是不确定选择哪种编程语言,那么您来对地方了. 在本文中,我将分享Java程序员可以在2018年学习的3种 ...
- java中设置网络代理
代理服务器概述 许多系统通过代理服务器访问Web,有时还会访问Internet的其它非HTTP部分.代理服务器接收到本地客户端到远程服务器的请求.代理服务器向远程服务器发出请求,再将结果转发回本地客户 ...
- Java Service Wrapper将java程序设置为服务
有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...
- java程序设置开机自启动
编写批量启动脚本 先创建一个start.bat的文件,直接创建一个txt将后缀名称改为bat就可以 在脚本内添加如下代码 @echo off taskkill /f /im java.exe star ...
- Linux给Java程序设置端口_扫描服务端口的Java程序
在Linux下用C写了一个扫描指定IP地址对外开放端口号的程序.扫描自己的机器的端口号速度还是挺快的,用编写的程序扫描在美国的服务器时,等了10分钟,端口号才扫到1000左右.于是就想到了用多线程,可 ...
- 设置java进程名称_如何为Java程序设置进程名称? - java
如果启动了Java程序,它将在系统进程中监视名称java.许多Java程序很难区分.因此,如果存在设置名称的方法,它将很好地显示在过程监视器中.我知道这在不同的操作系统上可能会有所不同. 一个简单的方 ...
- Java程序设置的目的_java程序设计教学大纲的课程性质与目的.doc
java程序设计教学大纲的课程性质与目的 <Java程序设计> Java Language Programming Design 教学大纲 一.课程性质与目的 JAVA程序设计是计算机专业 ...
- java内存设在哪里设置,java程序设置最大内存 在哪里设置java内存大小
怎么调整eclipse的内存大小? 设置Eclipse内存使用情况修改eclipse根目录下的eclipse.ini文件-vmargs //虚拟机设置-Xms40m -Xmx256m-XX:PermS ...
- java程序通过http代理访问网络获取节假日数据
最近接到一个需求,需要计算工作日,比如某个周一调休放假,某个周六调休上班,由于节假日的安排是国家发布的,我们的系统是在内网,那就需要根据国家发布的安排在自己的数据库里记录,想到如果对着日历去录数据那就 ...
最新文章
- 4000字干货分享|一文学会搭建炫酷可视化大屏
- Winform中实现实时颜色拾取器显示RGB和16进制颜色(附代码下载)
- sqserver对比oracle的区别,oracle和sqlserver比较
- ITK:提取具有多个分量的图像通道
- 手机拍照成像误区解读
- windows server 2003 出错提示请求的资源在使用中解决方案
- script地下状态栏效果
- 【王道考研计算机网络】—分层结构 协议 接口 服务
- MySQL学习笔记——第1章 数据库和MySQL
- 【原】设置iOS项目BuildVersion自动增加
- UE4之python编程
- 网易云音乐 linux x32,网易云音乐 for Mac
- windows虚拟网卡驱动开发
- 百度云盘加速器for mac
- Survey: A Survey on Image Tampering and Its Detection in Real-world Photos 图像仿冒
- 心中有佛,看谁都是佛;心中有屎,看谁都是屎。
- 匿名方法和Lambda表达式
- input输入框输满3个字符自动跳到下一个input输入框
- 求n的阶乘的算法框图_当代程序员必备技能(算法)之:递归详解 - Java斗帝之路...
- Nginx正向代理和反向代理的区别
热门文章
- VMwareESX常用命令和IP地址修改
- 使用Hourglass网络来理解人体姿态
- 如何强制Windows在文件资源管理器中显示所有驱动器
- js 时间转东八区_JS时区时间转换详解
- 数据错误循环冗余检查是什么意思_将解耦功能集成到电源中,会发生什么?
- MYSQL数据库ANY的用法_数据库——IN、ANY、SOME 和 ALL 操作符的使用
- linux网站杀毒软件,linux下的杀毒软件----ClamAV
- AMap(地图组成与名词解释)
- 金蝶迷你版云服务器没有响应,金蝶迷你版打开显示已运行,请等待,就不出现金蝶界面...
- 【美港探案】百度Q2:需要重新定义