1 前言

有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http、https、ftp、socks代理。比如在IE浏览器设置代理。

那我们在我们的java程序中使用代理呢,有如下两种方式。直接上代码.

2 采用设置系统属性

import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.Properties;

public class ProxyDemo1 {
	public static void main(String[] args) {
		Properties prop = System.getProperties();
		// 设置http访问要使用的代理服务器的地址
		prop.setProperty("http.proxyHost", "183.45.78.31");
		// 设置http访问要使用的代理服务器的端口
		prop.setProperty("http.proxyPort", "8080");
		// 设置不需要通过代理服务器访问的主机,可以使用*通配符,多个地址用|分隔
		prop.setProperty("http.nonProxyHosts", "localhost|192.168.0.*");
		// 设置安全访问使用的代理服务器地址与端口
		// 它没有https.nonProxyHosts属性,它按照http.nonProxyHosts 中设置的规则访问
		prop.setProperty("https.proxyHost", "183.45.78.31");
		prop.setProperty("https.proxyPort", "443");
		// 使用ftp代理服务器的主机、端口以及不需要使用ftp代理服务器的主机
		prop.setProperty("ftp.proxyHost", "183.45.78.31");
		prop.setProperty("ftp.proxyPort", "21");
		prop.setProperty("ftp.nonProxyHosts", "localhost|192.168.0.*");
		// socks代理服务器的地址与端口
		prop.setProperty("socksProxyHost", "183.45.78.31");
		prop.setProperty("socksProxyPort", "1080");
		// 设置登陆到代理服务器的用户名和密码
		Authenticator.setDefault(new MyAuthenticator("userName", "Password"));
	}

	static class MyAuthenticator extends Authenticator {
		private String user = "";
		private String password = "";

		public MyAuthenticator(String user, String password) {
			this.user = user;
			this.password = password;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(user, password.toCharArray());
		}
	}

}

 

3  使用Proxy

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;

public class ProxyDemo2 {
	public static void main(String[] args) throws Exception {
		URL url = new URL("http://www.3lai8.com");
		// /创建代理服务器
		InetSocketAddress addr = new InetSocketAddress("192.168.0.254", 8080);
		// Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Socket 代理
		Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理
		Authenticator.setDefault(new MyAuthenticator("username", "password"));// 设置代理的用户和密码
		HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);// 设置代理访问
		InputStreamReader in = new InputStreamReader(connection.getInputStream());
		BufferedReader reader = new BufferedReader(in);
		while (true) {
			String s = reader.readLine();
			if (s != null) {
				System.out.println(s);
			}
		}
	}

	static class MyAuthenticator extends Authenticator {
		private String user = "";
		private String password = "";

		public MyAuthenticator(String user, String password) {
			this.user = user;
			this.password = password;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(user, password.toCharArray());
		}
	}

}

4 总结

OK,就这么的简单,搞定,用第一种方式是一种全局的代理,用第种方式可以针对具体的哪一个使用代理。知道了这些我们就可以做我们想做的事情了哦!

java中设置代理的两种方式的更多相关文章

  1. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  2. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  3. java中实现同步的两种方式:syschronized和lock的区别和联系

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...

  4. Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  5. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  6. Java中创建String的两种方式

    1.在Java中,创建一个字符串有两种方式 String x = "abc";String y = new String("abc"); 这两种方式有什么区别呢 ...

  7. java中创建字符串的两种方式(“”与new String())及区别

    结论:通过""创建的字符串实际上在java堆中只有一个,而通过new string创建出来的字符串在java堆中占有不同的内存. 第一个True表明这两个在内存中拥有相同的地址,那 ...

  8. Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口

    对象的序列化就是将对象写入输出流中. 反序列化就是从输入流中将对象读取出来. 用来实现序列化的类都在java.io包中,我们常用的类或接口有: ObjectOutputStream:提供序列化对象并把 ...

  9. java中String初始化的两种方式

    转自:http://www.diybl.com/course/3_program/java/javajs/2007104/75886.html       字符串可能是任何程序语言中都会出现的对象,j ...

随机推荐

  1. 轻量级OLAP(一):Cube计算

    有一个数据多维分析的任务: 日志的周UV: APP的收集量及标注量,TOP 20 APP(周UV),TOP 20 APP标注分类(周UV): 手机机型的收集量及标注量,TOP 20 机型(周UV),T ...

  2. Net设计模式实例之单例模式( Singleton Pattern)

    一.单例模式简介(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯 ...

  3. C++如何调用C#开发的dll

    序言 本文介绍一个C++如何调用C#开发的dll实例. 前言 C++编写的程序为非托管代码,C#编写的程序为托管代码.托管代码虽然提供了其他开发平台没有的许多优势,但由于前期系统及历史版本很多使用的是 ...

  4. 用Javascript模拟微信飞机大战游戏

    最近微信的飞机大战非常流行,下载量非常高. 利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化] [此游戏中没有使用HTML5 任何浏览器都可以运行]. 效果图: 原理:利用 ...

  5. 基于MVC4+EasyUI的Web开发框架经验总结(16)--使用云打印控件C-Lodop打印页面或套打报关运单信息

    在最新的MVC4+EasyUI的Web开发框架里面,我整合了关于网购运单处理的一个模块,其中整合了客户导单.运单合并.到货扫描.扣仓.出仓.查询等各个模块的操作,里面涉及到一些运单套打的操作,不过由于 ...

  6. SQL分页查询的几种方式

    需求:查询表dbo.Message,每页10条,查询第2页 1:TOP() ) * FROM dbo.Message WHERE Code NOT IN () Code FROM dbo.Messag ...

  7. nodejs 遍历数组的两种方法

    var array = [1,2,3]; array.forEach(function(v,i,a){ console.log(v); console.log(i); console.log(a); ...

  8. Java动态代理全面分析

    代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1  主题:规定代理类和真实对象共同对外暴露的接口: 2  代理类:专门代理真实对象的类: 3 ...

  9. jquery固定在顶部的导航菜单

    体验效果:http://hovertree.com/texiao/jquery/6.htm HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  10. CSS3——3D旋转图(跑马灯效果图)

    CSS3新增了很多新的属性,可以用很少的代码实现炫酷的动画效果,但由于兼容性各浏览器的能力存在不足,有特别需求的网站就呵呵啦.H5C3已是大势所趋了,之前看过一个新闻,Chrome将在年底全面转向H5 ...