id | title | sidebar_label |
---|---|---|
proxy | 使用代理 | 使用代理 |
众所周知,我们平时访问HTTP,就是直接输入URL外加Query参数或Body参数就开始直接发送请求,随后等待服务端响应便可。请求通过内网或公网一般都可以正常工作(如果客户端和服务端设备正常联通网络的话),就如下图所示:
正向代理
但也有很多服务由于网络限制等诸多原因,无法直接访问到。这时候就需要先连接代理服务器,然后再由代理服务器转发请求到您原本要访问的原始服务器。 这种方式,便称为正向代理,过程如下图所示:
当然,正向代理除了能访问原本访问不到的资源这一功能外,还有其它用处:
- 访问原来无法访问的资源,如: Google、油管、企业私有网络服务等
- 做缓存,加速访问速度
- 对客户端访问授权和认证
- 记录用户访问记录(上网行为管理)
除了有正向代理外,自然也有反向代理,但这个概念不在本文档讨论范围,有兴趣可以自行搜索查询相关资料。
设置正向代理
Forest从1.5.0-RC1
版本开始支持HTTP网络代理,而作为一个HTTP客户端框架,自然提供的是对正向代理的支持。
通过@HTTPProxy
注解便可以非常简单地为某一个请求方法设置代理,该注解有两个属性:
host: 代理服务器主机地址
port: 代理服务器端口号
/**
* 使用 @HTTPProxy 注解设置代理服务器
* host属性为代理服务器主机地址
* port属性为代理服务器端口号
*/
@Post(
url = "http://localhost:8080/hello",
data = "username=foo&password=123456"
)
@HTTPProxy(host = "127.0.0.1", port = "10801")
String simplePostWithProxy(@Header("Accept") String accept);
@HTTPProxy
注解也可以设置在接口类上,批量给接口中所有方法设置相同的代理服务器
/**
* 为 PostClient 接口中所有的请发方法设置代理服务器
*/
@BaseRequest(baseURL = "http://localhost:8080")
@HTTPProxy(host = "127.0.0.1", port = "10801")
public interface PostClient {
... ...
}
设置用户名密码
如果您访问的代理服务器需要进行身份校验,则在 @HTTProxy
注解中设置用户名和密码
/**
* 在 @HTTPProxy 注解中有 username 和 password 属性
* 分别用于设置代理服务的用户名和密码进行身份验证
*/
@Post(
url = "http://localhost:8080/hello",
data = "username=foo&password=123456"
)
@HTTPProxy(
host = "127.0.0.1",
port = "10801",
username = "foo",
password = "bar"
)
String simplePostWithProxy(@Header("Accept") String accept);