1. 初始配置
在springboot 启动时候配置了系统参数
其中的http 和 https 分别做好代理了
prop.setProperty("https.proxyHost", "192.168.0.1");
prop.setProperty("https.proxyPort", "8888");
就等价于 -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort = 8888 ,但是这种设置有一个限制,那就是只对 JDK 自带的 HttpURLConnection 有效
2. 阿里配置
阿里的SDK会通过 System.getenv("HTTPS_PROXY") 和 System.getenv("HTTP_PROXY") 来判断系统的环境中是否有如下两个变量。有的话就设置到 HttpClientConfig 中,没有的话则直接 return
2.1 获取默认profile
2.2 取用的是默认的HttpClientConfig
2.3 默认的代理为空
2.4 阿里取出的代理配置
结论:阿里取用的代理并不是我们第一步中设置的代理,所以我们要重新设置! 所以这个取出的默认代理并不是我们之前所设置的
3. 解决办法
解决办法 将HTTPS_PROXY 或者 HTTP_PROXY 设置为系统环境变量(可以生效,但是不推荐) 在 buildClient 方法里面,可以发现只有当 HttpClientConfig 为空的情况下才会创建默认的 config,那么我们可以在 IClientProfile 里面,手动的将 HttpClientConfig 设置进去,从而避免创建默认的HttpClientConfig。 用 JDK 的 HttpURLConnection 发请求,通过 System.setProperty 设置代理。
在获取profile的时候设置如下代码,
设置如下,添加代理
HttpClientConfig config = HttpClientConfig.getDefault();
config.setHttpProxy("http://10.26.x.x:8888");
config.setHttpsProxy("http://10.26.x.x:8888");
profile.setHttpClientConfig(config);
这才是真正的设置阿里调用时的代理地址