rete:
Come utilizzare HttpsURLConnection tramite proxy di setProperty? ambiente
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 Cliente senza gateway predefinito, ma può ping per 10.100.21.11
Descrizione:
OS: Ubuntu 12.04 su 3 host
Https client: Implementare con java (openjdk-6). Avere un'unica interfaccia di rete.
Server proxy: Apache2.2.Have due interfacce di rete.
Server Https: Tomcat6.Ha un'unica interfaccia di rete.
Utilizzo due metodo per implementare HttpsURLConnection mediante delega:
(Per facilitare non scrivo giù sulla funzione maniglia SSL per controllare serverTrusted e hostnameVerifier issue.If bisogno I aggiornerà.)
classe 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();
...
Questo metodo utilizzabile e ho osservato che il flusso dei pacchetti ha soddisfatto anche le mie aspettative.
HttpClient ---> ProxyServer ---> HTTPServer
Ma quando io uso impostare il metodo di proprietà:
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();
...
ho ottenuto un NoRouteToHostException: Network is unreachable
.
Mi fa confondere.Non ho visto alcun pacchetto tra HttpClient e ProxyServer.
Ma HttpClient fare un rumore metallico a ProxyServer (10.100.12.10 ping 10.100.21.11)
Così ho rimuovere impostazioni proxy (come senza l'utilizzo di proxy):
ottenuto anche NoRouteToHostException: Network is unreachable
.
Ho pensato che questo è ragionevole. Perché non esiste un percorso per extranet.
Credo che sembra a setProperty metodo che la funzione interna di HttpsURLConnection volontà di controllare questo URL può essere raggiungibile o meno.
Ma è strano. 1o metodo può essere successo.
Hai qualche idea? O quali sono le differenze tra il 1 ° e il 2 ° metodo?
+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++
Aggiornamento
System.setProperty("https.proxyHost",10.100.21.11);
System.setProperty("https.proxyPort","80");
si può lavorare e il flusso di pacchetti sono corretti quello che mi aspetto per.
Ma impostare https.proxyPort = 443 non è praticabile per me
System.setProperty("https.proxyPort","443");
Sarà thorow un'eccezione come muggito:
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:770)
....
Così ho pensato di Apache Proxy devono anche essere modificato per la giusta configurazione .
Non esiste una proprietà come http .proxySet. – EJP
sì. questa proprietà in realtà non ha bisogno di essere impostata.Grazie ~ – CJeremy