Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS
Posted
技术标签:
【中文标题】Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS【英文标题】:Spring boot Resttemplate dynamic proxy setup connection through ssh tunnel does not recognize remote DNS 【发布时间】:2019-09-18 18:48:45 【问题描述】:我正在尝试通过 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 代理系统属性,但是没有用:
袜子:
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");
【问题讨论】:
【参考方案1】:我找不到任何解决此问题的方法。但是,可以将记录添加到/etc/hosts
文件作为解决方法。
【讨论】:
以上是关于Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java Spring boot 中模拟 RestTemplate?
使用注入 java 和 spring boot 的 RestTemplate 类进行单元测试
spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException