Java代理 通过ProxySelector设置全局代理

Java网络 10/11 阅读 9194 views次 人气 0
摘要:

Java提供了ProxySelector类来设置全局的代理,通过继承该类,设置具体代理的类型、地址和端口。

What21ProxySelector类:

package com.what21.proxy;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

public class What21ProxySelector extends ProxySelector {

	@Override
	public void connectFailed(URI uri, SocketAddress address, IOException e) {
		
	}

	@Override
	public List<Proxy> select(URI uri) {
		List<Proxy> list = new ArrayList<Proxy>();
		// 代理地址
		String address = "127.0.0.1";
		// 代理端口
		int port = 8888;
		InetSocketAddress sockAddr = new InetSocketAddress(address, port); 
		// Proxy.Type.SOCKS Socks代理类型
		Proxy proxy = new Proxy(Proxy.Type.SOCKS, sockAddr);
        list.add(proxy);
        return list;
	}

}

ProxySelector类全局代理的应用:

package com.what21.proxy;

import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.util.List;

public class ProxyMain {

	public static void main(String[] args) {
		What21ProxySelector proxySelector = new What21ProxySelector();
		// 设置全局代理
		ProxySelector.setDefault(proxySelector);
		
		// 设置全局代理认证
	Authenticator.setDefault(new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("username", "password"
                        .toCharArray());
            }
        });
        
		// appliaction......
		
		// 获取到全局代理
		ProxySelector ps = ProxySelector.getDefault();
		// 获取到代理的列表
		List<Proxy> proxyList = ps.select(URI.create("/"));
		// 代理类
		System.out.println(proxyList.get(0));
	}

}

输出:

SOCKS @ /127.0.0.1:8888

在应用程序实现的业务中,需要使用代理时,可以从全局的代理类中获取到代理信息,实现代理的业务。

当代理需要认证时,可以继承Authenticator类来实现用户名和密码认证。

评论

该文章不支持评论!

分享到: