我有一个集成测试,它可以正确地模拟身份验证调用,但现在需要支持代理。我对代理没有经验,在测试这方面遇到了很多困难。
具体实施情况如下:
proxySettings.setProxy(httpClientBuilder, null);
RestTemplate restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build()));
...
restTemplate.exchange(url, HttpMethod.POST, entity, type);
这个
setProxy()
方法获取一些用户配置的代理设置,并将它们应用于
HttpClientBuilder
:
//Fetch user-configured proxy settings and null check before returning object
HttpHost proxyHttpHost = getHttpClientProxyHttpHost();
httpClientBuilder.setProxy(proxyHttpHost);
//If user/pass is set (credentialsProvider is just a new instance of BasicCredentialsProvider)
credentialsProvider.setCredentials(
new AuthScope(getHttpProxyHost(), Integer.parseInt(getHttpProxyPort())),
proxyUsernamePasswordCredentials
);
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
非代理版本的测试通过了以下预期:
expect().when(
request()
.withMethod("POST")
.withPath("/auth")
.withBody(
params(
param("client_id", clientId),
param("client_secret", clientSecret),
param("grant_type", grantType),
param("scope", scope)
))
).respond(
response()
.withStatusCode(expectedResponseStatusCode)
.withContentType(MediaType.APPLICATION_JSON)
.withBody(json("{\"access_token\":\"ImAHappyString\"}"))
);
当我在配置了代理的情况下运行测试时(主机:
proxy-host.com
港口城市
1234
)我得到以下错误:
ErrorMessage: I/O error on POST request for "http://127.0.0.1:37351/auth": proxy-host.com: Name or service not known; nested exception is java.net.UnknownHostException: proxy-host.com: Name or service not known
我试着期待一个
CONNECT
请求,但我只是得到了同样的失败。有什么建议吗?