Вопрос-ответ

How do I set the proxy to be used by the JVM

Как мне настроить прокси для использования JVM

Часто приложению Java требуется подключение к Интернету. Наиболее распространенный пример происходит, когда оно читает XML-файл и ему необходимо загрузить его схему.

Я нахожусь за прокси-сервером. Как я могу настроить свою JVM на использование прокси?

Переведено автоматически
Ответ 1

Из документации Java (не javadoc API):

http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

Установите флаги JVM http.proxyHost и http.proxyPort при запуске JVM в командной строке. Обычно это делается в сценарии оболочки (в Unix) или bat-файле (в Windows). Вот пример со сценарием оболочки Unix:

JAVA_FLAGS=-Dhttp.proxyHost=10.0.0.100 -Dhttp.proxyPort=8800
java ${JAVA_FLAGS} ...

При использовании контейнеров, таких как JBoss или WebLogic, мое решение заключается в редактировании сценариев запуска, предоставляемых поставщиком.

Многие разработчики знакомы с Java API (javadocs), но часто остальная документация упускается из виду. Она содержит много интересной информации: http://download.oracle.com/javase/6/docs/technotes/guides /


Обновление : Если вы не хотите использовать прокси для разрешения некоторых локальных / интрасетевых узлов, ознакомьтесь с комментарием от @Tomalak:


Также не забывайте о свойстве http.nonProxyHosts!


-Dhttp.nonProxyHosts="localhost|127.0.0.1|10.*.*.*|*.example.com|etc"
Ответ 2

Чтобы использовать настройку системного прокси-сервера:

java -Djava.net.useSystemProxies=true ...

Или программно:

System.setProperty("java.net.useSystemProxies", "true");

Источник: http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html

Ответ 3

Программно настроить HTTP / HTTPS и / или SOCKS прокси:

...

public void setProxy() {
if (isUseHTTPProxy()) {
// HTTP/HTTPS Proxy
System.setProperty("http.proxyHost", getHTTPHost());
System.setProperty("http.proxyPort", getHTTPPort());
System.setProperty("https.proxyHost", getHTTPHost());
System.setProperty("https.proxyPort", getHTTPPort());
if (isUseHTTPAuth()) {
String encoded = new String(Base64.encodeBase64((getHTTPUsername() + ":" + getHTTPPassword()).getBytes()));
con.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
Authenticator.setDefault(new ProxyAuth(getHTTPUsername(), getHTTPPassword()));
}
}
if (isUseSOCKSProxy()) {
// SOCKS Proxy
System.setProperty("socksProxyHost", getSOCKSHost());
System.setProperty("socksProxyPort", getSOCKSPort());
if (isUseSOCKSAuth()) {
System.setProperty("java.net.socks.username", getSOCKSUsername());
System.setProperty("java.net.socks.password", getSOCKSPassword());
Authenticator.setDefault(new ProxyAuth(getSOCKSUsername(), getSOCKSPassword()));
}
}
}

...

public class ProxyAuth extends Authenticator {
private PasswordAuthentication auth;

private ProxyAuth(String user, String password) {
auth = new PasswordAuthentication(user, password == null ? new char[]{} : password.toCharArray());
}

protected PasswordAuthentication getPasswordAuthentication() {
return auth;
}
}

...

Помните, что HTTP-прокси и SOCKS-прокси работают на разных уровнях сетевого стека, поэтому вы можете использовать один или другой, или оба.

Ответ 4

Вы можете установить эти флаги программно следующим образом:

if (needsProxy()) {
System.setProperty("http.proxyHost",getProxyHost());
System.setProperty("http.proxyPort",getProxyPort());
} else {
System.setProperty("http.proxyHost","");
System.setProperty("http.proxyPort","");
}

Просто верните правильные значения из методов needsProxy(), getProxyHost() и getProxyPort(), и вы сможете вызывать этот фрагмент кода, когда захотите.

java jvm