在軟體開發中,代理就像是一個“中間人”,它幫我們控制對某個功能或資源的訪問。使用代理可以實現許可權檢查、記錄動作記錄、快取資料、消極式載入等功能,而不用改動原來的代碼。這樣可以讓程式更安全、運行更快,也更容易維護和擴充。本文將為您介紹Java(非同步)SDK中如何配置代理。
代理類型
Java(非同步)SDK 使用com.aliyun.core.http.ProxyOptions類來配置代理類型,支援以下兩種常見的代理類型:
類型 | 描述 |
| HTTP代理,適用於大多數Web網路環境。 |
| SOCKS5代理,適用於複雜網路拓撲情境。 |
代理配置
1. 建立Proxy 位址對象
建立一個表示Proxy 伺服器地址的InetSocketAddress對象:
java.net.InetSocketAddress inetSocketAddress = new java.net.InetSocketAddress("<YOUR-PROXY-HOSTNAME>", <連接埠號碼>);請將 <YOUR-PROXY-HOSTNAME>替換為實際的Proxy 伺服器主機名稱或 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();