2013-02-26 61 views
0

我有一个必须连接到外部Web服务(使用Axis客户端)的Web应用程序。我必须执行两件事情:Java中用于连接到特定URL的硬编码代理

  • 允许Web应用程序去沟通外部使用给定的HTTP代理(授权WS客户端)
  • 使用直接连接时,我们执行的本地呼叫通过URI像

    http://localhost:7001/webApp/getImg?id=22

注意,它就像一个魅力,如果我们使用的系统属性(http.proxyHost,等等),而不是这个ProxySelector。

但事情是所有的本地电话都路由到代理服务器,我不想要。

所以,只是一个简单的问题 - 如何实现ProxySelector,其执行方式与使用代理系统属性时相同?

回答

0

您也可以通过设置http.nonProxyHosts=localhost来实现此功能。如果你想用一个ProxySelector做到这一点,然后尝试这样的事情

final Proxy PROXY = new Proxy(Proxy.Type.HTTP, 
    new InetSocketAddress("my.proxy.server", 8080)); 
ProxySelector.setDefault(new ProxySelector() { 
    public List<Proxy> select(URI u) { 
    if(u != null && !"localhost".equals(u.getHost())) { 
     return Arrays.asList(PROXY, Proxy.NO_PROXY); 
    } 
    else { 
     return Collections.singletonList(Proxy.NO_PROXY); 
    } 
    } 

    public void connectFailed(URI u, SocketAddress sa, IOException e) { 
    // do nothing 
    } 
}); 
+0

嗨伊恩, 的事情是,我用两个web服务在我的Java应用程序。 1.)它使用HTTPS连接到外部网站(需要代理服务器) 2.)另一个通过HTTP连接到内部网站(另一个应用程序不在本地主机上)在某些其他服务器上10.24.240.21 现在我使用 System.setProperty(“https.proxyHost”,“XXX.XXX.XX.XXX”); // PROXY ADDRESS System.setProperty(“https.proxyPort”,“3128”); // PROXY PORT How我是否这样做,对于第二个Web服务它不使用代理服务器 – Sankalp 2013-02-26 13:51:17