网络代理

代理有助于减少安全性的外部威胁,同时还允许内部用户访问因特网服务

有两种代理实现方式

一、设置系统属性

通过设置系统属性(System.setPropery(String key, String value)的方式,这种方式会影响所有的请求,

可用的网络代理属性,请参照

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html

1、设置代理

System.setProperty("java.net.useSystemProxies", "true");
// HTTP代理
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort + "");
// HTTPS代理
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", proxyPort + "");
2、获取代理

/**
 * 获取代理
 * 
 * @param url
 * @return
 */
private static Proxy getSystemProxy(String url) {
	Proxy proxy = null;
	try {
		ProxySelector ps = ProxySelector.getDefault();
		List<Proxy> proxyList = ps.select(new URI(url));
		if (null != proxyList && !proxyList.isEmpty()) {
			proxy = proxyList.get(0);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	return proxy;
}

二、java.net.Proxy

本方式只对当前请求起作用

InetSocketAddress inetAddress= new InetSocketAddress(proxyHost,proxyPort);
//创建代理
Proxy proxy = new Proxy(Proxy.Type.HTTP,inetAddress);

//设置代理
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);

三、代理认证

有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的Web浏览器,
您就可能碰到过这种情况。以下是执行认证的方法:

1、Authenticator

Authenticator.setDefault(new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(username,password);
			}
		});

这种方式是全局的,对所有请求生效。


2、设置请求消息头

String auth="username:password"; 
String encodedAuth=base64Encode(auth); 
String header="Proxy-Authorization: basic "+encodedAuth;
只对当前请求生效。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值