我正在尝试通过 SSH 隧道到达远程服务器以获取一些 Rest 请求。我已经通过 putty 设置了一个动态代理来将流量代理到远程服务器。使用浏览器访问远程服务时,它按预期工作。
我创建了一个 Resttemplate 代理,以使用本地动态代理通过 SSH 隧道连接到远程服务。我遇到的问题是我的应用程序无法解析远程 DNS 来查找远程服务器。因此,我收到 java.net.UnkonwnHostException 错误。我知道通过浏览器访问,通常还应该设置一个属性来为 DNS 请求启用代理。我不确定 Spring Boot Resttemplate 代理设置是否有这样的东西。请找到我的代理设置代码如下。
@Configuration
public class ProxyCustomizer implements RestTemplateCustomizer {
@Autowired
private ProxyConfig proxyConfig;
@Override
public void customize(RestTemplate restTemplate) {
if (proxyConfig == null) return;
HttpHost proxy = new HttpHost(proxyConfig.getHostname(), proxyConfig.getPort());
HttpClient httpClient = HttpClientBuilder.create()
.setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(HttpHost target,
HttpRequest request, HttpContext context)
throws HttpException {
return super.determineProxy(target, request, context);
}
}).build();
restTemplate.setRequestFactory(
new HttpComponentsClientHttpRequestFactory(httpClient));
}
}
我也尝试过使用 Socks 和 HTTP 代理系统属性,但没有成功:
socks :
System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "socksProxyHost", "127.0.0.1" );
System.getProperties().put( "socksProxyPort", "9001" );
HTTP 代理:
props.put("http.proxyHost", "127.0.0.1");
props.put("http.proxyPort", "9001");
props.put("https.proxyHost", "127.0.0.1");
props.put("https.proxyPort", "9001");
最佳答案
我找不到解决此问题的方法。但是,可以将记录添加到 /etc/hosts
文件中作为解决方法。
关于java - Spring boot Resttemplate动态代理设置通过ssh隧道连接无法识别远程DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55915317/