代理配置

更新时间:

在软件开发中,代理就像是一个“中间人”,它帮我们控制对某个功能或资源的访问。使用代理可以实现权限检查、记录操作日志、缓存数据、延迟加载等功能,而不用改动原来的代码。这样可以让程序更安全、运行更快,也更容易维护和扩展。本文将为您介绍Java(异步)SDK中如何配置代理。

代理类型

Java(异步)SDK 使用com.aliyun.core.http.ProxyOptions类来配置代理类型,支持以下两种常见的代理类型:

类型

描述

ProxyOptions.Type.HTTP

HTTP代理,适用于大多数Web网络环境。

ProxyOptions.Type.SOCKS5

SOCKS5代理,适用于复杂网络拓扑场景。

代理配置

1. 创建代理地址对象

创建一个表示代理服务器地址的InetSocketAddress对象:

java.net.InetSocketAddress inetSocketAddress = new java.net.InetSocketAddress("<YOUR-PROXY-HOSTNAME>", <端口号>);

请将 <YOUR-PROXY-HOSTNAME>替换为实际的代理服务器主机名或 IP 地址,<端口号>替换为实际的端口号。

2. 配置ProxyOptions

根据代理类型,创建相应的ProxyOptions实例:

// 示例:配置HTTP代理
com.aliyun.core.http.ProxyOptions proxyOptions = new com.aliyun.core.http.ProxyOptions(
    com.aliyun.core.http.ProxyOptions.Type.HTTP, 
    inetSocketAddress
);

// 如果代理需要认证,请设置用户名和密码
proxyOptions.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>");

3. 应用代理配置

代理配置完成后,在异步客户端中应用代理配置:

com.aliyun.core.http.HttpClient httpClient = new com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder()
        // 配置代理
        .proxy(proxyOptions)
        .build();
        
AsyncClient client = AsyncClient.builder()
        .credentialsProvider(credentialProvider)
        .httpClient(httpClient)
        .overrideConfiguration(
                ClientOverrideConfiguration.create()
                        .setEndpointOverride("<ENDPOINT>")
                        .setProtocol("https") // 通过HTTP代理时,Protocol值为http;其他代理建议使用https。
        )
        .build();   

完整示例代码如下:

// 配置代理IP及端口
java.net.InetSocketAddress inetSocketAddress = new java.net.InetSocketAddress("<YOUR-PROXY-HOSTNAME>", <端口号>);
com.aliyun.core.http.ProxyOptions proxyOptions = new com.aliyun.core.http.ProxyOptions(com.aliyun.core.http.ProxyOptions.Type.HTTP, inetSocketAddress);
// 当代理需要认证访问时,需设置代理的用户名和密码
proxyOptions.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>");

com.aliyun.core.http.HttpClient httpClient = new com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder()
        // 配置代理
        .proxy(proxyOptions)
        .build();

AsyncClient client = AsyncClient.builder()
        .credentialsProvider(credentialProvider) // 此处省略credentialProvider实现过程
        .httpClient(httpClient)
        .overrideConfiguration(
                ClientOverrideConfiguration.create()
                        .setEndpointOverride("<ENDPOINT>")
                        .setProtocol("https") // 建议使用https;当使用HTTP代理http请求时,则设为http
        )
        .build();

相关文档

HTTP代理配置实践