Wie verwende ich HttpsURLConnection über Proxy von setProperty?

Netzwerkumgebung:

Https-Client <============> Proxyserver <============> Https-Server
192.168.17.11 <----- Extranet ------> 192.168.17.22
10.100.21.10 <---- Intranet -----> 10.100.21.11

ps: HTTP-Client ohne Standardgateway, kann jedoch einen Ping-Befehl an 10.100.21.11 senden

Beschreibung:

Betriebssystem: Ubuntu 12.04 auf 3 Hosts
HTTP-Client: Implementieren mit Java (openjdk-6) .Haben eine Netzwerkschnittstelle.
Proxy Server: Apache2.2.Hat zwei Netzwerkschnittstellen.
HTTP-Server: Tomcat6.Haben eine Netzwerkschnittstelle.

Ich verwende zwei Methoden, um zu implementierenhttpsurlconnection über Proxy:
(Zur Erleichterung schreibe ich nicht über SSL-Handle-Funktion für die PrüfungserverTrusted undhostnameVerifier Bei Bedarf werde ich updaten.)

1.Proxy-Klasse
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();
...

Diese Methode funktionierte und ich beobachtete, dass der Paketfluss auch meine Erwartungen erfüllte.
HttpClient ---> ProxyServer ---> HttpServer

Aber wenn ich set Property-Methode verwende:

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();
...

Ich bekam einNoRouteToHostException: Network is unreachable.
Das verwirrt mich. Ich habe keine Pakete zwischen HttpClient und ProxyServer gesehen.
Aber HttpClient kann an ProxyServer pingen (10.100.12.10 ping 10.100.21.11)

Also entferne ich die Proxy-Einstellungen (wie ohne Proxy):
Bekam auchNoRouteToHostException: Network is unreachable.
Ich dachte, das ist vernünftig. Weil es keinen Weg zum Extranet gibt.

Ich denke, es scheint sosetProperty Methode, die die innere Funktion vonhttpsUrlConnection will diese url überprüfen kann erreichbar sein oder nicht.

Aber es ist komisch. 1. Methode kann Erfolg sein.

Hast du eine Idee? Oder was ist anders zwischen 1. und 2. Methode?

++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

Aktualisieren

System.setProperty("https.proxyHost",10.100.21.11);
System.setProperty("https.proxyPort","80"); 

Es kann funktionieren und der Paketfluss ist korrekt, was ich erwarte.
Aber set https.proxyPort = 443 funktioniert bei mir nicht

System.setProperty("https.proxyPort","443");

Es wird eine Ausnahme wie folgt auslösen:

java.net.SocketException: Unexpected end of file from server 
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770)
....

Deshalb dachte ich, dass Apache Proxy auch an die richtige Konfiguration angepasst werden muss.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage