java.net.URL 设置代理服务器和自定义Host头绕过DNS解析

在我们日常工作中,由于办公网络的限制,连接外网访问时需要指定代理,

而访问某些虚拟主机域名的服务器时,并不存在对应的dns解析记录,因此需要手工配置hosts文件来进行映射,非常麻烦。

于是根据java.net.URL的api整理了设置代理服务器和自定义Host头绕过DNS解析的方法:

代码如下:


public static void main(String[] args) throws IOException {
/**
* 下面这种方法是全局方式的设置 ,不建议使用。
* System.setProperty("proxySet", "true");
* System.setProperty("proxyHost", "proxy.proxyHost.com");
* System.setProperty("proxyPort", "8010");
*/
String urlStr = "http://www.aerchi.com";
urlStr = "http://blog.csdn.net/aerchi";
HttpURLConnection httpConn = null;
StringBuilder sb = new StringBuilder();
 url = new (urlStr);
String hostName = url.getHost();
// 根据配置自定义url里的ip地址
if (hostName.toLowerCase().endsWith(".mqq.im")) {
url = new URL(urlStr.replace(hostName, "127.0.0.1"));
}
System.out.println(url);
Proxy proxy = new Proxy(Proxy.Type., new InetSocketAddress("proxy.proxyHost.com", 8010));
// 只针对当前这个连接使用http代理
httpConn = (HttpURLConnection) url.openConnection(proxy);
httpConn.setRequestMethod("GET");
// 手工设置Host头信息以支持虚拟主机,通过这样的方式,可以避免去手工配置/etc/hosts来绕过dns解析的麻烦,尤其是程序经常在不同服务器上运行的时候,非常实用
httpConn.setRequestProperty("Host", hostName);
httpConn.setConnectTimeout(5000);
httpConn.connect();
InputStream is = httpConn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line).append('\n');
}
// 关闭连接
httpConn.disconnect();
System.out.println(sb);
}

原文地址: http://blog.csdn.net/aerchi/article/details/7921198

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值