java代理设置

      要想让你的java应用使用代理连接网络,有两种方式可以做到。

       一、设置System的properties,这种方法的缺点是不能为单独应用设置不同的代理。

       二、使用Proxy类,这种方法可以为单独的应用设置单独的代理。


抽象类

package com.rabbit.proxy;

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

import com.rabbit.util.ConfigReader;

/**
 * @author yangfei
 * @since 2014-5-4
 */
public abstract class AbstractProxy {
	

	/**
	 * 代理信息,本地通过配置文件获取
	 */
	protected static final boolean NEED_PROXY = Boolean.parseBoolean(ConfigReader.getValue("needProxy"));
	protected static final String PROXY_URL = ConfigReader.getValue("proxy.host");
	protected static final int PROXY_PORT = Integer.valueOf(ConfigReader.getValue("proxy.port"));

	
	protected abstract URLConnection getHttpUrlConnect(URL url) throws IOException;

}

系统代理实现方式
package com.rabbit.proxy;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;

/**
 * 
 * @author yangfei
 * @since 2014-5-4
 */
public class SystemProxy extends AbstractProxy {

	static {
		if (NEED_PROXY) {
			Properties prop = System.getProperties();
			// 设置http访问要使用的代理服务器的地址
			prop.setProperty("http.proxyHost", PROXY_URL);
			// 设置http访问要使用的代理服务器的端口
			prop.setProperty("http.proxyPort", "" + PROXY_PORT);
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.rabbit.proxy.AbstractProxy#getUrlConnect(java.lang.String)
	 */
	@Override
	protected URLConnection getHttpUrlConnect(URL url) throws IOException {
		return url.openConnection();
	}

}

通过proxy类方式

package com.rabbit.proxy;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;

/**
 * @since 2014-5-4
 */
public class ConnectProxy extends AbstractProxy {

	/* (non-Javadoc)
	 * @see com.rabbit.proxy.AbstractProxy#getUrlConnect(java.net.URL)
	 */
	@Override
	protected URLConnection getHttpUrlConnect(URL url) throws IOException {
		URLConnection conn = null;
		if (NEED_PROXY) {
			Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
					PROXY_URL, PROXY_PORT));
			conn = url.openConnection(proxy);
		} else {
			conn = url.openConnection();
		}
		return conn;
	}

}



Connection工厂类

package com.rabbit.proxy;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import com.rabbit.util.ConfigReader;

/**
 * @since 2014-5-4
 */
public class URLConnectionFactory {
	
	public static AbstractProxy getProxy() throws MalformedURLException{
		String proxyMethod = ConfigReader.getValue("proxyFactory.method");
		if("system".equals(proxyMethod)){
			return new SystemProxy();
		}else{
			return new ConnectProxy();
		}
	}
	
	public static URLConnection getProxyConnection(String url) throws IOException{
		AbstractProxy proxy = getProxy();
		return proxy.getHttpUrlConnect(new URL(url));
	}

}

测试类(读取网络文件)

package com.rabbit.file;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;

import com.rabbit.proxy.URLConnectionFactory;
import com.rabbit.util.ConfigReader;

/**
 * 远程文件工具类
 * 
 * @author yfei
 * 
 */
public class RemoteFileUtil {
	
	/**
	 * 通过http协议,获取远程文件
	 * 
	 * @param netFilePath
	 *            文件地址
	 * @param destFilePath
	 *            目标文件地址
	 * @throws IOException
	 *             exception
	 */
	public static void readHttpFile(String netFilePath, String destFilePath)
			throws IOException {
		HttpURLConnection conn = (HttpURLConnection) URLConnectionFactory.getProxyConnection(netFilePath);
		DataInputStream input = new DataInputStream(conn.getInputStream());
		DataOutputStream output = new DataOutputStream(new FileOutputStream(
				destFilePath));
		int len;
		byte[] b = new byte[5012];
		while ((len = input.read(b)) != -1) {
			output.write(b, 0, len);
		}
		input.close();
		output.close();
	}
	
	public static void main(String args[]) throws IOException{
		readHttpFile("http://www.baidu.com","D:\\test.html");
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值