A ver, tengo un problema con un proxy que intento hacer. Estoy solicitando información a un servidor fuera del dominio de mi aplicación, y por tanto estoy usando un proxy para poder conectar.
Necesito hacer una petición a "http://dominioExterno/Aplicacion" pasandole por POST unos parámetros; mi petición es del tipo: "http://miDominio/Proxy" y le paso por POST los parámetros, más otro URL="http://dominioExterno/Aplicacion" para que mi proxy sepa el servidor al que quiero acceder y que él haga una conexión transparente con el contenido de mi petición al sitio externo.
En mi proxy leo el request que le mando y los headers para escribirlos en el objeto HttpURLConnection cambiandole el host al del dominio externo:
Código:
A la hora de leer los parámetros del request, los encadeno en un string de manera "key1=value1&key2=value2&...":URL url = new URL(request.getParameter("URL")); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); ... for (Enumeration enu=request.getHeaderNames();enu.hasMoreElements();){ ... if (!pName.toUpperCase().startsWith("HOST")) { ... conn.setRequestProperty(pName,pValu); } else conn.setRequestProperty(pName,url.getHost() + ":" + url.getPort()); }
Código:
y los escribo en la nueva conexión creada con HttpURLConnection:for (Enumeration enu=request.getParameterNames();enu.hasMoreElements();){ ... String pName=(String)enu.nextElement(); String pValue=request.getParameter(pName); inputRequest += pName + "=" + pValue; if(enu.hasMoreElements()) inputRequest += "&"; }
Código:
el problema lo tengo ahora!!! Cuando supuestamente la conexión se realiza con el objeto HttpURLConnection, para leer el resultado tendria que mirar:PrintWriter pw = new PrintWriter(conn.getOutputStream()); pw.print(inputRequest); pw.flush(); pw.close();
Código:
y leeria del buffer "rdr" para escribirlo en mi response de mi proxy hacia mi aplicación ya dentro de mi servidor://Aqui tendría que conectarse pero no lo hace! InputStreamReader ri = new InputStreamReader(conn.getInputStream()); BufferedReader rdr = new BufferedReader(ri));
Código:
mi problema es (como he indicado arriba) cuando intento obtener el "InputStream" de la conexión transparente, por lo visto no se conecta al servidor ni la aplicación externa. El resto del código está bien por que intento conectarme a páginas externas que no piden parámetros (metiendo en la URL una web cualquiera) y no da problema, por lo que supongo que será la manera en que le paso los parámetros a la aplicación externa, con lo que esta al no recibir parámetros da error y por eso no consigo conexión.PrintWriter out = new PrintWriter(response.getOutputStream()); ...
Si alguien supiera como arreglarlo...lo hice el viernes pasado y funcionó, pero de pronto el lunes no...y no se si es cosa mia o del servidor externo...
Muchas gracias!!
P.D.: lo siento si he escrito mucho, pero asi es más claro de explicarlo, de paso si alguién quiere hacer un proxy asi pilla idea de como hacerlo.