REST Assured 提供代理规格,可把中间代理的地址与凭据放在一起:

import static io.restassured.RestAssured.given;
import io.restassured.specification.ProxySpecification;

var proxy = ProxySpecification.host("proxy.example")
    .withPort(8080)
    .withScheme("http")
    .withAuth(proxyUser, proxyPassword);

var request = given().proxy(proxy);

应用从常规的凭据来源提供 proxyUser 与 proxyPassword。这段代码只负责构造请求规格;具体调用目标 API URL,仍用测试原有的请求与断言代码通过 request 完成。

http 方案描述的是代理端点,API 的 URL 仍可以是 HTTPS。withAuth 提供的是代理基本认证,它并不会因为传入了两个字符串就去协商各种企业认证方案。

API 的凭据应放在 API 自己的认证配置中,不要用通用的 Authorization 头或服务密码去顶替代理账号。在 HTTPS 下,对中间代理的认证可能发生在建立 CONNECT 阶段,此时与目标之间的 HTTP 交换还不存在。

当剩下的失败是证书信任问题时

被拒绝的 CONNECT 挑战与 TLS 证书校验错误 是两种不同的结果。如果客户端信任配置中缺少组织要求的 CA,应通过获批的管理渠道获取该 CA,并配置测试客户端的 truststore。

REST Assured 为此提供了 trustStore。truststore 改变的是 HTTPS 客户端信任哪些签发者,它既不选择代理,也不提供代理的登录信息。应保持主机名与证书校验开启,而不要用 accept-all 握手去接受任何被出示的证书。

相关文章