[java] JVM에서 프록시를 사용하도록 설정하는 방법

많은 경우, Java 앱은 인터넷에 연결해야합니다. 가장 일반적인 예는 XML 파일을 읽고 스키마를 다운로드해야 할 때 발생합니다.

프록시 서버 뒤에 있습니다. 프록시를 사용하도록 JVM을 어떻게 설정합니까?



답변

자바 문서 (에서 하지 javadoc에의 API) :

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

JVM이 플래그를 설정 http.proxyHost하고 http.proxyPort명령 행에 JVM을 시작할 때. 일반적으로 쉘 스크립트 (Unix) 또는 bat 파일 (Windows)에서 수행됩니다. 유닉스 쉘 스크립트를 사용한 예는 다음과 같습니다.

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.*.*.*|*.foo.com‌​|etc"


답변

시스템 프록시 설정을 사용하려면 :

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


답변

프로그래밍 방식으로 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 프록시는 네트워크 스택에서 서로 다른 수준에서 작동하므로 둘 중 하나 또는 둘 다 사용할 수 있습니다.


답변

이러한 방법으로 프로그래밍 방식으로 해당 플래그를 설정할 수 있습니다.

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

그냥 방법에서 올바른 값을 반환 needsProxy(), getProxyHost()그리고 getProxyPort()당신은 당신이 원하는 때마다이 코드를 호출 할 수 있습니다.


답변

JVM이 프록시를 사용하여 HTTP 호출

System.getProperties().put("http.proxyHost", "someProxyURL");
System.getProperties().put("http.proxyPort", "someProxyPort");

이것은 사용자 설정 프록시를 사용할 수 있습니다

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


답변

프록시 서버에 대한 일부 특성을 jvm 매개 변수로 설정할 수 있습니다

-Dhttp.proxyPort = 8080, proxyHost 등

그러나 인증 프록시를 통과해야하는 경우 다음 예와 같은 인증자가 필요합니다.

ProxyAuthenticator.java

import java.net.*;
import java.io.*;

public class ProxyAuthenticator extends Authenticator {

    private String userName, password;

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password.toCharArray());
    }

    public ProxyAuthenticator(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }
}

Example.java

    import java.net.Authenticator;
    import ProxyAuthenticator;

public class Example {

    public static void main(String[] args) {
        String username = System.getProperty("proxy.authentication.username");
        String password = System.getProperty("proxy.authentication.password");

                if (username != null && !username.equals("")) {
            Authenticator.setDefault(new ProxyAuthenticator(username, password));
        }

                // here your JVM will be authenticated

    }
}

이 답글을 기반으로 :
http://mail-archives.apache.org/mod_mbox/jakarta-jmeter-user/200208.mbox/%3C494FD350388AD511A9DD00025530F33102F1DC2C@MMSX006%3E


답변

분류기와 Javabrett / Leonel의 답변 결합 :

java -Dhttp.proxyHost=10.10.10.10 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password -jar myJar.jar