[java] HttpURLConnection이 프록시를 사용하도록하려면 어떻게합니까?

내가 이렇게하면 …

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

그것은 인쇄

Proxy? false

문제는 프록시 뒤에 있습니다. JVM은 Windows에서 프록시 정보를 어디에서 가져 옵니까? 이것을 어떻게 설정합니까? 다른 모든 앱은 프록시에 완벽하게 만족합니다.



답변

java 1.5부터 java.net.Proxy 인스턴스를 openConnection(proxy)메소드에 전달할 수도 있습니다 .

//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);

프록시가 인증을 요구하면 응답 407을 제공합니다.

이 경우 다음 코드가 필요합니다.

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);


답변

인터넷에서 대답하기가 매우 쉽습니다. 시스템 속성을 설정 http.proxyHost하고 http.proxyPort. 을 사용 System.setProperty()하거나 명령 줄에서 -D구문을 사용 하여이 작업을 수행 할 수 있습니다 .


답변

프록시는 http.proxyHost 및 http.proxyPort의 두 가지 시스템 속성을 통해 지원됩니다. 프록시 서버와 포트로 각각 설정해야합니다. 다음은 기본 예입니다.

String url = "http://www.google.com/",
       proxy = "proxy.mydomain.com",
       port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);


답변

설정할 수도 있습니다

-Djava.net.useSystemProxies=true

Windows 및 Linux에서는 시스템 설정을 사용하므로 반복 할 필요가 없습니다 (DRY)

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies


답변

Connection을 열기 전에 다음을 설정하십시오.

System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");

프록시에 인증이 필요한 경우

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");


답변

Java 1.8 이상의 경우 -Djdk.http.auth.tunneling.disabledSchemes=https를 사용하여 기본 권한 부여를 사용하여 프록시를 작성하도록 설정해야합니다 .


답변

프록시 호스트와 포트 =)를 알고 있으면 승인 된 답변이 작동합니다. 그러나 프록시 호스트와 포트를 찾고 있다면 아래 단계가 도움이 될 것입니다.

자동 구성된 프록시가 제공된 경우 :

1> 열린 IE (또는 모든 브라우저)

2> IE-> 도구-> 인터넷 옵션-> 연결-> LAN 설정-> 주소 가져 오기를 통해 브라우저에서 URL 주소를 가져 와서 URL 을 입력하십시오 ( 예 :
http://autocache.abc.com/ ). 파일은 .pac 형식으로 다운로드되어 바탕 화면에 저장됩니다

3> 텍스트 패드에서 .pac 파일을 열고 PROXY를 식별하십시오.

편집기에서 다음과 같이 나타납니다.

“PROXY web-proxy.ind.abc.com:8080; PROXY proxy.sgp.abc.com:8080″을 반환합니다.

5 분 안에 maven에서 bekur로 작동하지 않는 kudos

일단 당신이 호스트와 포트를 가지고 이것과 당신의 좋은에 팝업

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);