读书笔记-java网络编程-5URL和URI-代理
2016-07-05 12:02
344 查看
5. 代理
代理的作用:出于安全原因防止远程主机了解到本地网络配置的秘密细节
为了通过滤出站请求,限制可以浏览的网络。
出于性能考虑,运行多个用户从本地缓存获取同样的一些经常访问的文档,而不是重复从远程主机下载
5.1 系统属性
没看懂基本操作所要做的就是设置一些系统属性,指示本地代理服务器的地址。
如果使用存储的HTTP代理,则将http.proxyHost设置为代理服务器的域名或IP地址,将http.proxyPort设置为代理服务器端口(默认为80)还有一些方法包括在java代码中调用System.setProperty,或是通过启动时的-d 选项使用。
如果不需要代理,而是直接连接则要把http.nonProxyHost系统属性设置为其主机名或IP地址。
同样使用ftp协议可以通过设置ftp.proxyHost和ftp.proxyPort和ftp.nonProxyHosts属性实现
java不支持任何其他应用层协议,但是如果对所有TCP连接都使用传输层Socks代理,可以使用socksProxyHost和socksProxyPort系统属性。但是这个选项没有提供禁止代理选项。这是一个全有或全无的选择。
5.2 Proxy类
Proxy类提供粒度更细的控制。确切的说,它允许你为不同的远程主机选择不同的代理服务器。任然只有三种代理:HTTP、SOCKS和直接连接通过,Proxy.Type的三个枚举常量来表示:
Proxy.Type.DIRECT
Proxy.Type.HTTP
Proxy.Type.SOCKS
关于代理的其他重要信息包括地址和端口,用SocketAddress对象表示。
SocketAddress address = new InetSocketAddress("proxy.example.com",80); Proxy proxy = new Proxy(Proxy.Type.HTTP,address);
上述代码创建了一个Proxy对象,表示一个http代理服务器
5.3 ProxySelector类
每个运行中的虚拟机都有一个java.net.ProxySelector类,用于确定不同连接的代理服务器。默认的ProxySelector类只检查各种系统属性和URL协议,来决定如何连接到不同的主机。
不过你可以安装自己的ProxySelector子类来代替默认的选择器。用它根据协议、主机、路径、日期时间和其他标准来选择不同的代理。
这个类关键是抽象方法:
public abstract List<Proxy> select(URI uri)
uri表示需要连接的主机。对于Socket类生产的纯TCP连接,URI形式为:socket://host:port。
ProxySelector为这种类型对象选择正确的代理。并返回到一个
List<Proxy>中
第二个重要的抽象方法:
public void conectFailed(URI uri,SocketAddress address, IOException ex)
这是一个回调方法,用于警告程序这个代理服务器实际上没有建立连接。
由于每个虚拟机只有一个ProxySelector,因此要改变这个ProxySelector,需要把新的选择器传递给静态方法ProxySelector.setDefault(),此后虚拟机打开的所有连接都像这个ProxySelect询问将要使用的正确代理。不要在共享环境中运行这样的代码。
相关文章推荐
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- Lua下基本的网络编程示例
- linux网络编程用到的网络函数详解用和使用示例
- C#网络编程基础之进程和线程详解
- C++ 网络编程 总结
- Jquery实战_读书笔记1―选择jQuery
- Linux网络编程之UDP Socket程序示例
- JavaScript 精粹读书笔记(1,2)
- JavaScript 权威指南(第四版) 读书笔记
- Android网络编程之UDP通信模型实例
- 谈谈新手如何学习PHP网络编程第1/2页
- Python 网络编程起步(Socket发送消息)
- java必学必会之网络编程
- c# socket网络编程接收发送数据示例代码
- Terry七月Ruby读书笔记(比较详细)第1/4页
- NodeJS学习笔记之网络编程
- Java网络编程之简单的服务端客户端应用实例
- 整理java读书笔记十五之java中的内部类
- java网络编程之识别示例 获取主机网络接口列表