2013-07-03 1 views
1

Google api의 https url에 접속하려고했습니다. 아래의 코드를 사용하면 오류가 발생합니다. 하지만 난 하나의 구글 API를 HTTP URL을 타격 할 수 있고 그것의 오류프록시를 통해 터널링 할 수 없습니다. 프록시가 "HTTP/1.1 407 프록시 인증 필요"를 반환합니다.

DataInputStream di = null; 

FileOutputStream fo = null; 

byte[] b = new byte[1]; 

// PROXY 
System.setProperty("https.proxyHost", "my proxy"); 
System.setProperty("https.proxyPort", "8080"); 


Authenticator.setDefault(new PasswordAuthenticator()); 


URL u = new URL("https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Vict&types=geocode&language=fr&sensor=true&key=keyforuse"); 

HttpURLConnection con = (HttpURLConnection) u.openConnection(); 

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder(); 
String encodedUserPwd = encoder.encode("domain\\user:password" 
     .getBytes()); 
con.setRequestProperty("Proxy-Authorization", "Basic " 
     + encodedUserPwd); 

di = new DataInputStream(con.getInputStream()); 
// result = parseJSON(di); 
while (-1 != di.read(b, 0, 1)) { 
    System.out.print(new String(b)); 
} 

없이 아주 잘 작동하지만

java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authorization Required" 
    at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:1648) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:164) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234) 
    at kf.store.locator.googlemaps.test.main(test.java:58) 

도움 아래에 오류가 ????

답변

0

사용자 이름 앞에 도메인이 필요하지 않을 수도 있습니다. 나는 매우 비슷한 문제를 겪었고 사용자 이름 앞에 도메인을 제거했을 때 그것을 고쳤습니다. 프록시 서버는 도메인에 있기 때문에 동일한 도메인 아래에 있다고 생각합니다.

+0

저는 도메인과 sun.misc.BASE64Encoder 인코더 아래 코드를 사용해 새로운 sun.misc.BASE64Encoder =()을 제거한; \t \t \t 문자열 encodedUserPwd = encoder.encode ("386654 : 2013 @ Jun1" \t \t \t \t \t .getBytes()); \t \t \t con.setRequestProperty ("프록시 인증", "기본" \t \t \t \t \t + encodedUserPwd); 여전히 오류 발생 프록시를 통해 터널링 할 수 없습니다. 프록시는 "HTTP/1.1 400 잘못된 요청"을 반환합니다. 암호화 된 자격 증명을 추가하는 대신 – rand

+0

이 도움이 될 것입니다. 프록시 호스트에 추가하려고 했습니까? System.setProperty ("https.proxyHost", "user : pass @ proxyHost") 도움이되는지 아닌지는 잘 모르겠지만 한 번 해보는 것이 좋습니다. 전에는 그걸 잊어 버렸어. 그것 이외에, 당신의 코드는 나에게 잘 어울립니다. – Callan

0

내 사용자 이름과 암호로 프록시 서버에 인증하여 문제를 해결했습니다. 회사 네트워크에 있다면, 그것은 당신의 신용도 될 수 있습니다. 이 의 등가는 다음과 같이 될 것이다 :

-Dhttp.proxyUser=myusername 
-Dhttp.proxyPassword=mypassword 
-Dhttp.proxyHost=myproxyserver.com 
-Dhttp.proxyPort=9000 
관련 문제