ProxySelector:每个URL的不同代理

问题描述 投票:1回答:1

我试图了解ProxySelector类是如何工作的。我当前的代码如下所示:

    URI uri = new URI("http://google.com");
    proxySelector.select(uri);

我知道在调用proxySelector.select(uri);时,假设返回相应URI的代理列表。但我没有看到如何为每个URI设置代理。

我知道我可以使用setDefault()方法设置默认代理,但据我所知,这将设置系统范围的代理,而不是特定URI的代理。

我可能在这里遗漏了一些基本点,但是我如何为url A设置一个代理(例如http://google.com)和为url B设置一个不同的代理(例如http://ebay.com),然后让系统在每次连接时自动选择正确的代理相应的网址?

java proxy uri http-proxy proxyselector
1个回答
2
投票
  1. 覆盖ProxySelector.select(URI uri)方法,您可以在其中实现自定义逻辑,以选择正确的代理或URI的代理列表。
  2. 通过调用ProxySelector将新的,自定义的ProxySelector.setDefault(customProxySelector)设置为系统范围。 URLConnection的任何子类都将使用ProxySelector,例如: URLConnection conn = url.openConnection();
  3. 或配置您将用于调用远程URI的框架,例如Spring RestTemplate: HttpRoutePlanner routePlanner = new SystemDefaultRoutePlanner(new MyProxySelector()); HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory( HttpClientBuilder.create() .setRoutePlanner(routePlanner) .build()); restTemplate = new RestTemplate(clientHttpRequestFactory);

如果自定义逻辑没有为uri确定合适的代理,最好在自定义select(URI uri)中回退到默认的ProxySelector。

请参阅我的ProxySelector example的其他答案。

网络和代理在Java Networking and Proxies(第4段ProxySelector)和ProxySelector Java docs中得到了很好的解释。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.