问题背景
今天在回顾下 Fiddler 的时候发现邮箱来了封泰康人寿的邮件,打开的时候360也是报警说是假冒的网站,页面打开之后也是很明显的假的网站,骗用户的信息的.那就赶巧了,分析分析这个网站的请求, 经过分析他对提交的邮箱,手机号等数据进行了格式和唯一的校验,那么就再写几行JAVA代码,顺便数据库搞点垃圾数据,.当然为了隐藏下自己, JAVA的流量需要经过代理出去的.
现在就给大家介绍下如何在Java程序中使用代理访问网络。
解决方案
首先你需要一个代理服务器,和一个可以连接到此服务器的客户端。
客户端需要开放本地的代理端口,以1080为例.
指定 Java 程序的代理服务器地址和端口
有两种指定方式:
通过 命令行参数 指定
如果只需要考虑代理 HTTP 协议请求,只需添加如下命令行参数:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080
想要 HTTP 和 HTTPS 协议的请求都通过代理访问网络,可以追加上:
-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080
最终填写的值为:
-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080
在程序中使用System.setProperty(String, String)
同样很简单,这里直接上代码:
String proxyHost = "127.0.0.1"; String proxyPort = "1080"; System.setProperty("http.proxyHost", proxyHost); System.setProperty("http.proxyPort", proxyPort); // 对https也开启代理 System.setProperty("https.proxyHost", proxyHost); System.setProperty("https.proxyPort", proxyPort);
推荐使用第一种方案,通过VM Option 的方式,对代码没有任何侵入,绿色环保。
经过我测试使用是没有问题的,不再贴测试结果.
总结
除了上述 http.proxyHost 和 http.proxyPort,以及 https.proxyHost 和 https.proxyPort 在代理时比较有用外,还有一个属性也比较有用,那就是 http.nonProxyHosts,它用来指定哪些主机不使用代理,如果有多个,用英文竖线(|)分隔,可以使用星号 (*)作为通配符。
下表是常用协议对应的代理属性:
还没有评论,来说两句吧...