1

我有一个 Web 应用程序,它必须连接到外部 Web 服务(使用 Axis 客户端)。我必须执行两件事:

  • 允许 webapp 使用给定的 HTTP 代理进行外部通信(以授权 WS 客户端)
  • 当我们通过 URI 执行本地调用时使用直接连接

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

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

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

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

4

1 回答 1

0

您还可以通过设置系统属性来实现此目的http.nonProxyHosts=localhost。如果你想用 a 来做,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
  }
});
于 2013-02-26T13:09:17.903 回答