在初始化阶段同时设置这两条链路,并使用实际提供给该服务的 IAM 认证器:

import java.net.InetSocketAddress;
import java.net.Proxy;
import com.ibm.cloud.sdk.core.http.HttpConfigOptions;

var proxy = new Proxy(
    Proxy.Type.HTTP,
    new InetSocketAddress("proxy.example.net", 8080));

authenticator.setProxy(proxy);

var options = new HttpConfigOptions.Builder()
    .proxy(proxy)
    .build();
service.configureClient(options);

这里的 authenticator 和 service 是应用已有的对象。请在获取 token 或开始服务请求之前应用这些设置,并保持正常的证书校验开启。如果应用对这两个目标都可以使用公共 HTTP 端点,可在HTTP 代理列表中查找候选地址。

这两处赋值覆盖的是不同的请求。authenticator.setProxy 覆盖 IAM token 链路;service.configureClient 把代理应用到服务传输层。只配置其中一个,并不会为另一个建立路由。

遇到失败时,先确认失败请求中指定的主机。token 获取成功只能把问题缩小到服务链路上;它并不能证明该链路已经收到了代理配置。

HttpConfigOptions 来自 IBM Java SDK Core。在改写旧的 ConversationService 示例时,应使用应用所选的 Core 包与服务生成版本,而不要照抄旧的服务专用网络类。

相关文章