2009-09-16 5 views
102

내가 이렇게하면 ...HttpURLConnection에서 프록시를 사용하도록 설정하려면 어떻게해야합니까?

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

내가 프록시 뒤에 오전, 문제는

Proxy? false 

인쇄합니다. JVM은 Windows에서 프록시 정보를 어디에서 가져 옵니까? 어떻게 설정합니까? 내 모든 다른 응용 프로그램은 내 프록시와 완벽하게 행복해 보입니다.

답변

262

자바 1.5 이후 당신은 또한 openConnection(proxy) 방법에 java.net.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); 
+6

우리는이를 통해 프록시 사용자 이름과 프록시 암호를 제공 할 수 있습니다. – Xolve

+1

정확히 내가 본 것. 그런데도 실수로 복사/붙여 넣기를하는 동안 downvote를 클릭했는데 너무 늦게 명령을 취소 할 수 없습니다. 죄송합니다. –

+9

다른 프록시에 대해 서로 다른 사용자 이름/암호 쌍이 있다면 어떻게 될까요? 정적 메서드를 호출하여 기본 인증자를 설정하는 것이 이상적이지는 않습니다. 이것은 sys 속성 메서드를 설정하는 것보다 낫지 않습니다. – javaPhobic

31

인터넷에서 대답하는 것이 매우 쉽습니다. 시스템 속성 http.proxyHosthttp.proxyPort을 설정하십시오. System.setProperty() 또는 -D 구문과 함께 명령 줄에서이 작업을 수행 할 수 있습니다. 당신이 이전에 대해서 openConnection을 다음

10

설정, 프록시 인증이 필요한 경우

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

,

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

실제로 생각은 "http.proxyUser은"와 "http.proxyPassword는"더 이상 지원되지 않습니다. 자세한 내용은 http://stackoverflow.com/questions/120797/how-do-i-set-the-proxy-to-be-used-by-the-jvm을 참조하십시오. – p3t0r

17

프록시는 두 개의 시스템 속성을 통해 지원됩니다 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); 
+0

@Pascal 아파치'commons-httpclient'와 비교할 때 가장 최근 Java 접근 방식을 사용했을 때의 주요 차이점은 무엇입니까? Java가 프록 싱 및 인증을 지원하므로 (예 : http://stackoverflow.com/questions/1626549/authenticated-http-proxy-with-java) 단순한 경우 (공용 HTTP 서버에서 파일 하나를 검색하는 경우와 같이) 아파치 라이브러리를 사용해야하는 이유. 당신의 추천은 무엇입니까? –

+0

@ dma_k 설명 드린 간단한 사용 사례에 대해 동의합니다. 타사 라이브러리를 사용하지 않을 것입니다. –

+0

nonProxyHosts를 지원하는 방법을 알고 계십니까? 내 장치가 그것을 지원하지만 내 애플 리케이션을 처리하게하는 방법을 모르겠 참조하십시오. – RiRomain

8

당신은 또한 당신 자신 (DRY)를 반복 할 필요가 없습니다 있도록이 승인 된 대답은 작동

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

+5

이것은 수동 프록시 서버 구성에서만 작동합니다. 스크립트를 통해 구성된 자동 프록시 구성 및 프록시는 "useSystemProxies"로 (아직) 전파되지 않습니다. – Tires

+0

proxyHost 및 proxyPort를 설정하지 않았을 때이 기능이 작동했습니다. 감사! – nrobey

2

시스템 설정을 사용하는 Windows 및 Linux에

-Djava.net.useSystemProxies=true 

을 설정할 수 있습니다. .. 당신이 알고 있다면 당신의 프록시 호스트와 포트 =). 그러나 경우에 당신은 아래의 단계가 도움이 프록시 호스트 및 포트를 찾고 있습니다

자동 구성 프록시가 주어진다면 : 다음

1> IE를 열고 (또는 브라우저)

2> IE-> 도구 -> 인터넷을 통해 브라우저에서 URL 주소를 얻으십시오 옵션 -> 연결 -> LAN 설정 -> 주소를 가져 와서 예를 들어 URL을 입력하십시오 : http://autocache.abc.com/과 같이 입력하면 파일이 .pac 형식으로 다운로드됩니다. , 데스크톱에 저장

3> TextPad를 오픈 .pac 파일, PROXY 식별 :

반환 "PROXY 웹-proxy.ind : 편집기에서

를, 그것은 같은 것을 올 것이다.abc.com : 8080; PROXY proxy.sgp.abc.com:8080 ";

명성은 그냥이로에서 팝업 호스트와 포트가 있으면 maven in 5 min not working

에서 bekur하는 당신의 좋은

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080)); 
     URLConnection connection = new URL(url).openConnection(proxy); 
이동 자바 1.8의 경우
3

높은 당신이 기본 인증은 https로 작업하는 프록시를 만들기 위해 -Djdk.http.auth.tunneling.disabledSchemes=를 설정해야합니다.

+0

이에 대한 배경 정보는 https://stackoverflow.com/questions/41806422/java-web-start-unable-to-tunnel-through-proxy-since-java-8-update-111에서 논의됩니다. – U880D

관련 문제