读书笔记-java网络编程-5URL和URI-代理

46 篇文章 0 订阅
17 篇文章 0 订阅

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询问将要使用的正确代理。不要在共享环境中运行这样的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值