네트워크 환경 :
setProperty를 통해 HttpsURLConnection을 프록시를 통해 사용하는 방법은 무엇입니까?
HTTPS를 클라이언트 < =============> 프록시 서버 < ==============> HTTPS를 서버
01 237,819, 192.168.17.11 < ----- 익스트라 ------> 192.168.17.22
10.100.21.10 < ---- 인트라넷 -----> 10.10 0.21.11추신 : 기본 게이트웨이없이 HTTP를 클라이언트하지만 10.100.21.11
설명에 Ping 할 수 있습니다 :
OS : 우분투 12.04 세에 호스트
HTTPS를 클라이언트 : java (openjdk-6)로 구현하십시오. 하나의 네트워크 인터페이스가 있어야합니다.
프록시 서버 : Apache2.2.Have 두 네트워크 인터페이스.
Https 서버 : Tomcat6.Have 하나의 네트워크 인터페이스. 촉진
(를 들어 내가 SSL 핸들 기능에 대해 기록해 두지 않는 확인하기 위해 는 issue.If 및 의 hostnameVerifier을 serverTrusted 내가 업데이트 할 필요
나는 프록시를 통해 HttpsURLConnection에을 구현하는 두 가지 방법을 사용합니다.)
1.Proxy 클래스
InetSocketAddress proxyInet = new InetSocketAddress("10.100.21.11",80);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyInet);
URL httpsUrl = new URL("https://192.168.17.22:8443/test");
HttpsURLConnection httpsCon = (HttpsURLConnection) httpsUrl.openConnection(proxy);
httpsCon.setDoOutput(true);
httpsCon.setDoInput(true);
httpsCon.setRequestMethod("POST");
OutputStream out = httpsCon.getOutputStream();
OutputStreamWriter owriter = new OutputStreamWriter(out);
owriter.write("<request>test</request>");
owriter.flush();
owriter.close();
...
이 방법은 실행 가능하며 패킷 흐름이 제 기대치를 충족시키는 것을 관찰했습니다.
HttpClient를 ---> proxyserver를 ---> HttpServer에
하지만 설정 재산권 방법을 사용하는 경우 : 2.setProperty
System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost",10.100.21.11);
System.setProperty("http.proxyPort","80");
URL httpsUrl = new URL("https://192.168.17.22:8443/test");
HttpsURLConnection httpsCon = (HttpsURLConnection)httpsUrl.openConnection();
httpsCon.setDoOutput(true);
httpsCon.setDoInput(true);
httpsCon.setRequestMethod("POST");
OutputStream out = httpsCon.getOutputStream();
OutputStreamWriter owriter = new OutputStreamWriter(out);
owriter.write("<request>test</request>");
owriter.flush();
owriter.close();
...
가 나는 NoRouteToHostException: Network is unreachable
을 가지고 있습니다.
나를 혼란스럽게 만듭니다.나는 HttpClient와 ProxyServer 사이에 어떤 패킷도 보지 못했다.
그러나 HttpClient를
그래서 내가 (프록시를 사용하지 않고 같은) 프록시 설정을 제거 proxyserver를 (10.100.12.10 핑 10.100.21.11)에 Ping 할 수 있습니다 :
또한 NoRouteToHostException: Network is unreachable
을 얻었다.
나는 이것이 합리적이라고 생각했다. 엑스트라 넷에 대한 경로가 없기 때문이다.
가 나는 HttpsURLConnection에의 내부 기능 뜻이 도달 여부가 될 수있는이 URL을 확인하는 setProperty는 방법처럼 보인다 같아요.
하지만 이상합니다. 첫 번째 방법은 성공 일 수 있습니다.
의견이 있으십니까? 아니면 첫 번째와 두 번째 방법이 다른가요?
+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++
업데이트
System.setProperty("https.proxyHost",10.100.21.11);
System.setProperty("https.proxyPort","80");
그것은 작동 할 수 및 패킷 흐름은 I가 기대하는 것을 정확합니다.
그러나 나를
System.setProperty("https.proxyPort","443");
그것은 벨으로 예외를 thorow 것이기 실행할 수없는 https.proxyPort = 443 설정 :
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770)
....
그래서 나는 아파치 프록시는이 올바른 구성을 수정할 생각 .
는 HTTP와 같은 그러한 특성이 없습니다 .proxySet. – EJP
예. 이 속성은 실제로 설정할 필요가 없습니다. 감사합니다 ~ – CJeremy