思路(注意:此方法设置的代理,需重启浏览器才可生效)

通过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程序设置本地代理相关推荐

  1. 为诺基亚S40手机添加java程序的cmwap代理配置!

    很多用诺基亚S40手机的朋友会发现这样一个问题,只要使用cmwap接入点,不论网络怎样设置,有些java程序就是不能联网,比如Opera Mini和英文版的Google Maps,而使用cmnet就可 ...

  2. java程序设置jvm_Java程序员应在2018年学习的3种JVM语言

    java程序设置jvm 如果您是Java程序员,并且想学习更多的编程语言以扩展您的知识和技能,但是不确定选择哪种编程语言,那么您来对地方了. 在本文中,我将分享Java程序员可以在2018年学习的3种 ...

  3. java中设置网络代理

    代理服务器概述 许多系统通过代理服务器访问Web,有时还会访问Internet的其它非HTTP部分.代理服务器接收到本地客户端到远程服务器的请求.代理服务器向远程服务器发出请求,再将结果转发回本地客户 ...

  4. Java Service Wrapper将java程序设置为服务

    有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...

  5. java程序设置开机自启动

    编写批量启动脚本 先创建一个start.bat的文件,直接创建一个txt将后缀名称改为bat就可以 在脚本内添加如下代码 @echo off taskkill /f /im java.exe star ...

  6. Linux给Java程序设置端口_扫描服务端口的Java程序

    在Linux下用C写了一个扫描指定IP地址对外开放端口号的程序.扫描自己的机器的端口号速度还是挺快的,用编写的程序扫描在美国的服务器时,等了10分钟,端口号才扫到1000左右.于是就想到了用多线程,可 ...

  7. 设置java进程名称_如何为Java程序设置进程名称? - java

    如果启动了Java程序,它将在系统进程中监视名称java.许多Java程序很难区分.因此,如果存在设置名称的方法,它将很好地显示在过程监视器中.我知道这在不同的操作系统上可能会有所不同. 一个简单的方 ...

  8. Java程序设置的目的_java程序设计教学大纲的课程性质与目的.doc

    java程序设计教学大纲的课程性质与目的 <Java程序设计> Java Language Programming Design 教学大纲 一.课程性质与目的 JAVA程序设计是计算机专业 ...

  9. java内存设在哪里设置,java程序设置最大内存 在哪里设置java内存大小

    怎么调整eclipse的内存大小? 设置Eclipse内存使用情况修改eclipse根目录下的eclipse.ini文件-vmargs //虚拟机设置-Xms40m -Xmx256m-XX:PermS ...

  10. java程序通过http代理访问网络获取节假日数据

    最近接到一个需求,需要计算工作日,比如某个周一调休放假,某个周六调休上班,由于节假日的安排是国家发布的,我们的系统是在内网,那就需要根据国家发布的安排在自己的数据库里记录,想到如果对着日历去录数据那就 ...

最新文章

  1. 4000字干货分享|一文学会搭建炫酷可视化大屏
  2. Winform中实现实时颜色拾取器显示RGB和16进制颜色(附代码下载)
  3. sqserver对比oracle的区别,oracle和sqlserver比较
  4. ITK:提取具有多个分量的图像通道
  5. 手机拍照成像误区解读
  6. windows server 2003 出错提示请求的资源在使用中解决方案
  7. script地下状态栏效果
  8. 【王道考研计算机网络】—分层结构 协议 接口 服务
  9. MySQL学习笔记——第1章 数据库和MySQL
  10. 【原】设置iOS项目BuildVersion自动增加
  11. UE4之python编程
  12. 网易云音乐 linux x32,网易云音乐 for Mac
  13. windows虚拟网卡驱动开发
  14. 百度云盘加速器for mac
  15. Survey: A Survey on Image Tampering and Its Detection in Real-world Photos 图像仿冒
  16. 心中有佛,看谁都是佛;心中有屎,看谁都是屎。
  17. 匿名方法和Lambda表达式
  18. input输入框输满3个字符自动跳到下一个input输入框
  19. 求n的阶乘的算法框图_当代程序员必备技能(算法)之:递归详解 - Java斗帝之路...
  20. Nginx正向代理和反向代理的区别

热门文章

  1. VMwareESX常用命令和IP地址修改
  2. 使用Hourglass网络来理解人体姿态
  3. 如何强制Windows在文件资源管理器中显示所有驱动器
  4. js 时间转东八区_JS时区时间转换详解
  5. 数据错误循环冗余检查是什么意思_将解耦功能集成到电源中,会发生什么?
  6. MYSQL数据库ANY的用法_数据库——IN、ANY、SOME 和 ALL 操作符的使用
  7. linux网站杀毒软件,linux下的杀毒软件----ClamAV
  8. AMap(地图组成与名词解释)
  9. 金蝶迷你版云服务器没有响应,金蝶迷你版打开显示已运行,请等待,就不出现金蝶界面...
  10. 【美港探案】百度Q2:需要重新定义