idtitlesidebar_label
proxy
使用代理
使用代理

众所周知,我们平时访问HTTP,就是直接输入URL外加Query参数或Body参数就开始直接发送请求,随后等待服务端响应便可。请求通过内网或公网一般都可以正常工作(如果客户端和服务端设备正常联通网络的话),就如下图所示:

proxy

正向代理

但也有很多服务由于网络限制等诸多原因,无法直接访问到。这时候就需要先连接代理服务器,然后再由代理服务器转发请求到您原本要访问的原始服务器。 这种方式,便称为正向代理,过程如下图所示:

proxy

当然,正向代理除了能访问原本访问不到的资源这一功能外,还有其它用处:

  • 访问原来无法访问的资源,如: Google、油管、企业私有网络服务等
  • 做缓存,加速访问速度
  • 对客户端访问授权和认证
  • 记录用户访问记录(上网行为管理)

除了有正向代理外,自然也有反向代理,但这个概念不在本文档讨论范围,有兴趣可以自行搜索查询相关资料。

设置正向代理

Forest从1.5.0-RC1版本开始支持HTTP网络代理,而作为一个HTTP客户端框架,自然提供的是对正向代理的支持。

通过@HTTPProxy注解便可以非常简单地为某一个请求方法设置代理,该注解有两个属性:

  • host: 代理服务器主机地址

  • port: 代理服务器端口号

  1. /**
  2. * 使用 @HTTPProxy 注解设置代理服务器
  3. * host属性为代理服务器主机地址
  4. * port属性为代理服务器端口号
  5. */
  6. @Post(
  7. url = "http://localhost:8080/hello",
  8. data = "username=foo&password=123456"
  9. )
  10. @HTTPProxy(host = "127.0.0.1", port = "10801")
  11. String simplePostWithProxy(@Header("Accept") String accept);

@HTTPProxy注解也可以设置在接口类上,批量给接口中所有方法设置相同的代理服务器

  1. /**
  2. * 为 PostClient 接口中所有的请发方法设置代理服务器
  3. */
  4. @BaseRequest(baseURL = "http://localhost:8080")
  5. @HTTPProxy(host = "127.0.0.1", port = "10801")
  6. public interface PostClient {
  7. ... ...
  8. }

设置用户名密码

如果您访问的代理服务器需要进行身份校验,则在 @HTTProxy 注解中设置用户名和密码

  1. /**
  2. * 在 @HTTPProxy 注解中有 username 和 password 属性
  3. * 分别用于设置代理服务的用户名和密码进行身份验证
  4. */
  5. @Post(
  6. url = "http://localhost:8080/hello",
  7. data = "username=foo&password=123456"
  8. )
  9. @HTTPProxy(
  10. host = "127.0.0.1",
  11. port = "10801",
  12. username = "foo",
  13. password = "bar"
  14. )
  15. String simplePostWithProxy(@Header("Accept") String accept);