我想在本地测试我的AWS代码,因此我必须为AWS客户端设置代理。
在我的环境中,通过变量HTTPS_PROXY
设置了一个代理主机(http://user@pass:my-corporate-proxy.com:8080)。
我没有找到一种方法来设置整个代理,因此我想到了以下代码:
AmazonSNS sns = AmazonSNSClientBuilder.standard()
.withClientConfiguration(clientConfig(System.getenv("HTTPS_PROXY")))
.withRegion(Regions.fromName(System.getenv("AWS_REGION")))
.withCredentials(new DefaultAWSCredentialsProviderChain())
.build();
ClientConfiguration clientConfig(String proxy) {
ClientConfiguration configuration = new ClientConfiguration();
if (proxy != null && !proxy.isEmpty()) {
Matcher matcher = Pattern.compile("(\\w{3,5})://((\\w+):(\\w+)@)?(.+):(\\d{1,5})").matcher(proxy);
if (!matcher.matches()) {
throw new IllegalArgumentException("Proxy not valid: " + proxy);
}
configuration.setProxyHost(matcher.group(5));
configuration.setProxyPort(Integer.parseInt(matcher.group(6)));
configuration.setProxyUsername(matcher.group(3));
configuration.setProxyPassword(matcher.group(4));
}
return configuration;
}
整个方法clientConfig
只是样板代码。
有什么优雅的方法可以实现这一目标吗?
答案 0 :(得分:0)
据我在使用AWS开发工具包V1(1.11.840)时所知,是否在运行时设置了HTTP(S)_PROXY
或http(s)_proxy
之类的环境变量,或http(s).proxyHost
之类的属性,proxyPort
,proxyUser
和proxyPassword
传递给您的应用程序,您无需进行任何设置。 automatically被读入新创建的ClientConfigiration
。
因此,您只需要在需要时设置ProxyAuthenticationMethod
。
ClientConfiguration clientConfig(ProxyAuthenticationMethod authMethod) {
ClientConfiguration conf = new ClientConfiguration();
List<ProxyAuthenticationMethod> proxyAuthentication = new ArrayList<>(1);
proxyAuthentication.add(authMethod);
conf.setProxyAuthenticationMethods(proxyAuthentication);
return conf;
}
ProxyAuthenticationMethod
可以是ProxyAuthenticationMethod.BASIC
或DIGEST
或KERBEROS
或NTLM
或SPNEGO