Как избежать соединения с ProxySelector
при подключении URLConnection
или, вернее, как получить соединение, гарантированное без каких-либо прокси, о которых знает Java?Как получить соединение без прокси-сервера в Java?
Я думал, что это был Proxy.NO_PROXY был для. Цитируя Javadoc:
Настройка прокси-сервера, который представляет собой прямую связь, в основном говорить обработчик протокола не использовать прокси
Однако такое соединение все равно будет идти через ProxySelector. Я не понимаю?
Я сделал небольшой тест, чтобы доказать свою точку зрения:
public static void main(String[] args) throws MalformedURLException, IOException {
ProxySelector.setDefault(new MyProxySelector());
URL url = new URL("http://foobar.com/x1/x2");
URLConnection connection = url.openConnection(Proxy.NO_PROXY);
connection.connect();
}
и фиктивный ProxySelector, которая не делает ничего, кроме журналов того, что происходит:
public class MyProxySelector extends ProxySelector {
@Override
public List<Proxy> select(URI uri) {
System.out.println("MyProxySelector called with URI = " + uri);
return Collections.singletonList(Proxy.NO_PROXY);
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {}
}
который печатает:
"MyProxySelector called with URI = socket://foobar.com:80"
(Обратите внимание, что протокол изменился с http
на socket
)
Я могу, конечно, создать свой ProxySelector таким образом, чтобы она всегда возвращает Proxy.NO_PROXY
если схема URI является socket
, но я думаю, там будет иметь место случаи, когда есть SOCKS прокси на сайте, и тогда он не будет верно ,
Позвольте мне повторить вопрос: мне нужен способ убедиться, что конкретный URLConnection
не использует прокси-сервер, независимо от того, какие параметры системы могут быть установлены или какой установлен ProxySelector.
Я думаю, вы также можете установить 'ProxySelector.setDefault (null);'. Это позволит напрямую подключиться. – Tunaki
@ Tunaki. К сожалению, это полностью отключит ProxySelector и для * all * соединений. – peterh
Тот факт, что прямые соединения проходят через «ProxySelector», является детальностью реализации. Какое тебе дело? У вас есть * реальная проблема? – EJP