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 错误。我知道通过浏览器访问,通常应该设置一个属性来启用 D​​NS 请求的代理。我不确定 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的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot restTemplate

spring boot 注入 restTemplate

如何在 Java Spring boot 中模拟 RestTemplate?

使用注入 java 和 spring boot 的 RestTemplate 类进行单元测试

spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException

(030)Spring Boot之RestTemplate访问web服务案例