前言
前两天公司搬到新的办公楼上班,但由于网络没有打通,只能通过设置跳板机 SSH 隧道的动态代理来访问原来的内网环境,之前已经写过一篇SSH端口转发总结,通过之前的文章,就可以解决访问原内网中的浏览器资源问题,但是还有一个问题:开发过程中的程序中数据库等资源依旧无法访问,本文记录了 Java 程序如何使用代理去请求其他服务。
查看 IP 地址的API
Java代码使用代理
目前在我的了解范围内,我知道有两种方式实现 Java 代码使用代理(所以我不敢说只有两种方式😅),分别是:程序中设置代理、设置 JVM 启动参数。在这些方式中,我推荐使用设置 JVM 启动参数这种方式,因为它对原代码没有侵入任何内容。
程序中设置代理
java中支持 HTTP代理、HTTPS代理、Socks代理、FTP代理、本地 IE 代理等。
通过System.setProperty(key , value)
进行设置。
HTTP
HTTP设置代理的参数如下:
http.proxyHost
http.proxyPort
http.nonProxyHosts
设置不走代理服务器访问的主机,可以使用*通配符,多个地址用|分隔
测试代码:
1 | import java.io.BufferedReader; |
HTTPS
HTTPS设置代理的参数如下:
https.proxyHost
https.proxyPort
注意:它没有https.nonProxyHosts属性,它按照http.nonProxyHosts中设置的规则访问
测试代码:
1 | import java.io.BufferedReader; |
FTP
FTP设置代理参数如下:
ftp.proxyHost
ftp.proxyPort
ftp.nonProxyHosts
由于没有真正的FTP代理测试环境,因此没有代码😅。
Socks
Socks 代理是最强大的,它能实现以上所有代理。数据库的JDBC内网连接就是通过 Socks 代理实现。
Socks设置代理参数如下:
socksProxyHost
socksProxyPort
测试代码:
1 | import java.io.BufferedReader; |
本地 IE 代理
本地 IE 代理设置代理参数如下:
java.net.useSystemProxies
测试代码:(通过设置本地可以查看效果)
1 | import java.io.BufferedReader; |
Java启动参数设置代理
Java可以通过设置以下命令来实现System.setProperty(key , value)
这行代码。
1 | -D<key>=<value> |
HTTP
-Dhttp.proxyHost
-Dhttp.proxyPort
-Dhttp.nonProxyHosts
HTTPS
-Dhttps.proxyHost
-Dhttps.proxyPort
FTP
-Dftp.proxyHost
-Dftp.proxyPort
-Dftp.nonProxyHosts
Socks
-DsocksProxyHost
-DsocksProxyPort
本地代理
-Djava.net.useSystemProxies