많은 경우, 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
}
}
답변
분류기와 Javabrett / Leonel의 답변 결합 :
java -Dhttp.proxyHost=10.10.10.10 -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password -jar myJar.jar