Netzwerkumgebung:
Wie wird HttpsURLConnection über den Proxy von setProperty verwendet?
Https-Client < =============> Proxy Server < ==============> HTTPS-Server
192.168.17.11 < ----- Extranet ------> 192.168.17.22
10.100.21.10 < ---- Intranet -----> 10.10 0.21.11ps: Http-Client ohne Standard-Gateway, aber es kann zu 10.100.21.11
Beschreibung ping:
OS:
Https-Client Ubuntu 12.04 auf 3-Hosts: Implementieren Sie mit Java (openjdk-6). Haben Sie eine Netzwerkschnittstelle.
Proxy-Server: Apache2.2.Have zwei Netzwerk-Schnittstellen.
Https Server: Tomcat6.Have eine Netzwerkschnittstelle.
ich zwei Verfahren HttpsURLConnection über Proxy implementieren:
(Für erleichtern Ich schreibe nicht über ssl Griff Funktion den für die Kontrolle serverTrusted und hostnameVerifier issue.If muss ich aktualisieren.
)
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 funktioniert und ich beobachtete Pakete fließen auch meine Erwartungen erfüllt.
Httpclient ---> Proxy Server ---> Httpserver
Aber wenn ich gesetzt Objektmethode:
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 ein NoRouteToHostException: Network is unreachable
bekam.
Es macht mich verwirrt.Ich habe keine Pakete zwischen HttpClient und ProxyServer gesehen.
Aber Httpclient kann Proxy Server (10.100.12.10 ping 10.100.21.11) ping
ich Proxy-Einstellung So entfernen (wie ohne Proxy):
bekam auch NoRouteToHostException: Network is unreachable
.
Ich dachte, das ist vernünftig. Weil es keinen Weg zum Extranet gibt.
Ich denke, es wie zu setProperty Methode scheint, dass die innere Funktion von HttpsURLConnection wird diese URL überprüfen erreichbar sein oder nicht.
Aber es ist seltsam. 1. Methode kann Erfolg sein.
Haben Sie eine Idee? Oder was unterscheidet zwischen 1. und 2. Methode?
+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++
aktualisieren
System.setProperty("https.proxyHost",10.100.21.11);
System.setProperty("https.proxyPort","80");
kann es funktionieren und Pakete fließen korrekt sind, was ich erwarte.
Aber gesetzt https.proxyPort = 443 nicht praktikabel ist für mich
System.setProperty("https.proxyPort","443");
Es wird als Gebrüll eine Ausnahme thorow:
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770)
....
Also dachte ich, Apache Proxy haben auch an der richtigen Konfiguration geändert werden .
gibt es keine solche Eigenschaft als http .proxySet. – EJP
ja. Diese Eigenschaft muss nicht gesetzt werden. Danke! ~ – CJeremy