Java - Peticion Post mediante Java

 
Vista:

Peticion Post mediante Java

Publicado por Ricardo (4 intervenciones) el 24/10/2013 22:48:44
Ayudenme porfavor necesito hacer una peticion mediante el metodo POST
De esta forma funciona correctamente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form action="<c:out value='${index_form.safetyCreateExpressToken}'/>" method="POST">
				<input type="hidden" name="ApiKey" value="<c:out value='${index_form.APIKey}'/>"/>
				<input type="hidden" name="RequestDateTime" value="<c:out value='${index_form.p_register_date}'/>"/>
				<input type="hidden" name="CurrencyCode" value="PEN"/>
				<input type="hidden" name="Amount" value="<c:out value='${index_form.formatamount}'/>"/>
				<input type="hidden" name="MerchantSalesID" value="<c:out value='${index_form.safetyMerchantID}'/>"/>
				<input type="hidden" name="ExpirationTime" value ="15" />
				<input type="hidden" name="TrackingCode" value="INTRALOT"/>
				<input type="hidden" name="Language" value="ES" />
				<input type="hidden" name="TransactionOkURL" value="<c:out value='${index_form.safetyTransactionOkURL}'/>" />
				<input type="hidden" name="TransactionErrorURL" value="<c:out value='${index_form.safetyTransactionErrorURL}'/>" />
				<input type="hidden" name="Signature" value="<c:out value='${index_form.cifrado}'/>" />
				<input type="hidden" name="ResponseFormat" value="CSV"/>
 
				<input type="submit"  class="button-update-user" style="margin-left: 250px;" value="Aceptar"/>
 
 
				<a class="button-update-user-cancel" style="margin-left: 10px;" href="#" onclick="cancel();">Cancelar</a>
 
</form>

Lo que pasa es que necesito manipular la respuesta por lo cual opte por hacer la peticion mediante un controlador
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public String getRespueta() throws IOException {
	String respuesta = "";
	 URL url = new URL("https://blabla.com/blabla");
	 	HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
	    conn.setDoOutput(true);
	    OutputStreamWriter wr = new OutputStreamWriter(
	    conn.getOutputStream()); -->EXACTAMENTE AQUI SE GENERA EL ERROR
//escribimos
wr.write(data);
//cerramos la conexión
  wr.close();
 
  //obtenemos el flujo de lectura
  BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
     String linea;
     //procesamos al salida
     while ((linea = rd.readLine()) != null) {
        respuesta+= linea;
     }
return respuesta;
}



15:11:35,494 WARN [ExceptionCatcher] Exception from exceptionCommand 'servlet-exception'
java.net.ConnectException: Connection timed out: connect
El error ocurre exactamente en conn.getOutputStream().

No se si necesite pedir algunas credenciales a la empresa que me brinda el servicio o si es algo del codigo porfa ayudenme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Peticion Post mediante Java

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 25/10/2013 18:49:56
Hola Ricardo, dos cosas, primero, ¿has verificado que el servlet si resiva la solicitud???
Segundo, creo que estás haciendo, esto a pedal y no se si tengas que hacerlo asi, pero te voy a dar una opción muyyyyyy buena. La API httpClient 3.1 te va ayudar mucho con esto y mas porque la URL a la que conectas maneja protocolo seguro http(s) y la API maneja esto trasparentemente, tambien maneja credenciales de seguridad, httpProxy, etc , etc. te doy un ejemplo:
1
2
3
4
5
6
7
8
9
10
11
String data="lo que sea que tengas que mandar"
StringRequestEntity requestEntity= new StringRequestEntity(data, "text/xml","UTF-8");
HttpClient client= new HttpClient();
			client.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), new UsernamePasswordCredentials("usuario", "password"));
method= new PostMethod(url);
method.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
method.setRequestHeader("Content-Length", data.length()+"");
method.setRequestEntity(requestEntity);
int codigoRespuesta=client.executeMethod(method);//Se espera un 200
String resul=method.getResponseBodyAsString();	//Aca maneja la respuesta
			System.out.println(resul);
Espero te ayude, Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Peticion Post mediante Java

Publicado por Ricardo (4 intervenciones) el 25/10/2013 19:12:58
Hola gracias por tu respuesta.
El dia de ayer encontre el error lo que pasa es que mi salida a internet es mediante una ip proxy y un puerto estos dos tenian que configurarse de la siguiente manera:

System.setProperty("https.proxyHost","192.168.100.14");
System.setProperty("https.proxyPort","8080");
Y con estas dos lineas de codigo buala! funciono Ok!

Todo quedaria asi aporte como Hacer una peticion post con java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public String getRespueta() throws IOException {
	String respuesta = "";
//	System.setProperty("https.proxySet", "true");
	 System.setProperty("https.proxyHost","192.168.100.14");Solo si usan una ip proxy
	 System.setProperty("https.proxyPort","8080");Solo si usan una ip proxy
	 URL url = new URL("https://blablabla.com/blabla");
	 	HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
	    conn.setDoOutput(true);
	    OutputStreamWriter wr = new OutputStreamWriter(
	            conn.getOutputStream());
//escribimos
wr.write(data);
//cerramos la conexión
  wr.close();
 
  //obtenemos el flujo de lectura
  BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
     String linea;
     //procesamos al salida
     while ((linea = rd.readLine()) != null) {
        respuesta+= linea;
     }
return respuesta;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Peticion Post mediante Java

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 25/10/2013 19:22:35
Hola Ricardo,
Muchas gracias por dejar tu solución. Una pregunta, que JDK tienes?? por que al utilizar este código me sale
sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection

No encuentra la clase en este paquete sun.net.www.protocol.http. Estás utilizando este paquete???

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Peticion Post mediante Java

Publicado por Ricardo (4 intervenciones) el 25/10/2013 19:34:30
La direccion url a la que envio la peticion es https://blablabla.com/blabla (HTTPS)
por eso uso HttpsURLConnection
Segun lo que veo tu deberias usar HttpURLConnection
prueba y avisame
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Peticion Post mediante Java

Publicado por Ricardo (4 intervenciones) el 25/10/2013 21:27:53
Hola Seria bueno que pongas tu codigo para poder ayudarte
JDK 1.6.0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Peticion Post mediante Java

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 25/10/2013 23:14:44
Hola,
Pues es el mismo tuyo, no le he cambiado absolutamente nada. Lo único que quiero saber es cual es la ruta completa de la clase HttpsURLConnection?? osea es:
javax.net.ssl.HttpsURLConnection;
Por que a mi me sale el error de abajo
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar