Как установить Http Proxy в апплет

Для приложения java для настольных компьютеров после того, как мы установили эти свойства

System.setProperty("java.net.useSystemProxies","true");
System.setProperty("http.proxyHost", "1.1.1.1");
System.setProperty("http.proxyPort", "8080");

каждое http-соединение будет выполняться через определенный прокси-сервер.

Но для апплета это не работает. (В средстве просмотра апплетов это происходит, но в браузере это не так.) Апплет всегда использует эти параметры, которые определены в настройках панели управления \java\network settings\proxy.

Как установить прокси-сервер в апплет? (Использование прокси-класса в каждом открытии соединения для меня не является решением.)

Апплет подписан и скомпилирован с помощью java 1.6

Ответ 1

Я предполагаю, что реальная причина, по которой подход "Свойства системы" не работает, заключается в том, что к моменту запуска апплета система времени выполнения Java уже прочитала свойства и настроила переключатель прокси-сервера по умолчанию.

Пробовали ли вы использовать ProxySelector? См. Раздел 4) этот документ.

Конечно, это может сработать, только когда ваш апплет является подписанным апплетом.

Ответ 2

Вы можете сделать это с помощью API, но не для каждого подключения.

Посмотрите URL.openConnection(). Он делегирует вызов обработчику. Обработчик создается обработчиком factory (если он зарегистрирован). Итак, вам нужно зарегистрировать свой собственный factory, создать обработчик URL, который выполняет URL-соединение через прокси (вызовы URL.openConnection(proxy)).

Factory должен реализовать интерфейс URLStreamHandlerFactory и может быть зарегистрирован путем вызова статического метода URL.setURLStreamHandlerFactory().