Fórum Enviar dados em POST com Java SE #446559
24/06/2013
0
Tenho um pouco de experiencia como desenvolvedor em Desktop utilizando Java SE, e nada de experiencia como Java Web. Me encontro com o desafío de ter que enviar dados desde uma aplicaçao minha (Desktop) para um servidor web via 'Post'.
A idea e a seguinte, desde uma aplicaçao que administra um Clube deportivo na qual atualmente eu ja disponho de uma funcionalidade para gerar recibos de mensalidades eu gostaría de integrarla a um site que tem a funcionalidade de gerar uma especie de boleto bancario que pode ser pago em qualquer loterica. Este site disponibiliza uma API PHP para que desenvolvedores integrem sus aplicaçoes com este serviço. O formulario debe ser o seguinte:
<input name="Cobrosya[token]" value="b76adcc734b25a81ce1b5b37798a8af0" type="hidden"> <input name="Cobrosya[concepto]" value="Inscripcion Evento A" type="hidden"> <input name="Cobrosya[monto]" value="200" type="hidden"> <input name="Cobrosya[url]" value="https://cobrosya.com/api/ejemplos/ej2/comprar.php" type="hidden"> <!--opcionales !--> <input name="Cobrosya[fecha_vencimiento]" value="12/12/2013" type="hidden"> <!-- Si se desea enviar el talon por mail luego de crearlo !--> <input name="Cobrosya[enviar]" value="1" type="hidden"> <!--en dolares !--> <input name="Cobrosya[moneda]" value="840" type="hidden"> <!-- fin opcionales !--> <label class="left" for="nombre">Ingresá tu nombre:</label> <input class="left" id="nombre" name="Cobrosya[nombre]" type="text"><br> <label class="left" for="email">Ingresá tu email:</label> <input class="left" id="email" name="Cobrosya[email]" type="text"><br> <input class="right" value="Comprar" type="submit">
A pergunta é a seguinte, de que forma eu poderia enviar estes paramentros em um 'Post' desde minha aplicaçao desktop? é posivel isto? ou terei que criar um servlet? Em fim preciso de uma ajuda para encontrar um caminho donde iniciar os estudos.
Até onde pesquisei aparentemente podería ser feito utilizando a classe HTTPUrlConnection, o codigo que eu fiz até o momento sem susseço e o seguinte:
public void enviaFormulario(){
try {
parametrosURL = "Cobrosya[token]=e3fd7270dff8d77c01bda18288f21fa2&Cobrosya[concepto]='prueba'&Cobrosya[monto]=40&Cobrosya[nombre]='Diego'&Cobrosya[email]='noblediego@hotmail.com'";
request = "https://cobrosya.com/talon/crearNuevoTalon";
url = new URL(request);
conexion = (HttpURLConnection) url.openConnection();
conexion.setDoOutput(true);
conexion.setDoInput(true);
conexion.setInstanceFollowRedirects(false);
conexion.setRequestMethod("POST");
conexion.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conexion.setRequestProperty("charset", "utf-8");
conexion.setRequestProperty("Content-Length", "" + Integer.toString(parametrosURL.getBytes().length));
conexion.setUseCaches(false);
wr = new DataOutputStream(conexion.getOutputStream());
wr.writeBytes(parametrosURL);
wr.flush();
wr.close();
conexion.disconnect();
} catch (MalformedURLException ex) {
Logger.getLogger(PruebasURLConnection.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(PruebasURLConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}Pesso desculpas pelas faltas ortográficas...
Obrigado
Diego Mello
Curtir tópico
+ 0Posts
25/06/2013
Marcelo Senaga
https://www.devmedia.com.br/realizando-login-em-sites-utilizando-java/27283
Tente fazer e qualquer dúvida eu te ajudo.
Gostei + 0
25/06/2013
Diego Mello
https://www.devmedia.com.br/realizando-login-em-sites-utilizando-java/27283
Tente fazer e qualquer dúvida eu te ajudo.
Muito obrigado pela dica!
Estou adaptando o código que vc postou, tirando linhas e tratando de simplificar um pouco, depois de eu fazer funcionar tentarei "embelezar" um pouco. O código esta assim pelo momento:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class PruebasURLConnection {
private final DefaultHttpClient client = new DefaultHttpClient();
public void generarRecibo(final String token, final String concepto, final String nombre, final String monto,
final String fecha_vencimiento, final String email, final String enviar, final String moneda) throws UnsupportedEncodingException, IOException {
/* Método POST */
final HttpPost post = new HttpPost("https://cobrosya.com/talon/crearNuevoTalon");
//Configura pará metros POST
final List<NameValuePair> nameValuePairs =
new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Cobrosya[token]", token));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[concepto]", concepto));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[nombre]", nombre));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[monto]", monto));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[fecha_vencimiento]", fecha_vencimiento));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[email]", email));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[enviar]", enviar));
nameValuePairs.add(new BasicNameValuePair("Cobrosya[moneda]", moneda));
//post.setEntity(new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8));
post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0");
/* Ejecuta el POST */
HttpResponse response = client.execute(post);
System.out.println("Respuesta del servidor: " + response.getStatusLine());
}
public void close() {
client.getConnectionManager().shutdown();
}
public static void main(String[] args) {
PruebasURLConnection generar = new PruebasURLConnection();
try {
// Tenta efetuar login
generar.generarRecibo("e3fd7270dff8d77c01bda18288f21fa2", "Prueba","Diego",
"40","25/06/2013","noblediego@hotmail.com","1","858");
generar.close();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Estou com algumas dificuldades, espero que possa me ajudar. O site diz que é possivel analizar o código de resposta para saber e resultado da transaçao, poreem nao estou sabendo como encaixar isto no código, montei um switch para analizar o código de retorno:
String resposta= response.toString();// variavel para analizar o response, nao esta funcionando
switch (resposta) {
case "0":
System.out.println("El talón ha sido creado exitosamente y enviado por mail");
case "1":
System.out.println("El talón ha sido creado exitosamente");
case "2":
System.out.println("Ha habido un error al crear el talón");
case "3":
System.out.println("El token no es correcto");
case "4":
System.out.println("Faltan campos obligatorios");
case "5":
System.out.println("El mail tiene un formato incorrecto");
case "6":
System.out.println("La fecha de vencimiento es incorrecta");
case "7":
System.out.println("La moneda no es valida(858 Pesos o 840 Dólares");
case "8":
System.out.println("El monto no es numérico");
case "9":
System.out.println("El celular tiene un formato incorrecto");
break;
default:
throw new AssertionError();
}Meu código nao esta dando nenhum erro mas também nao esta funcionando jeje por isso quero analizar o retorno pra tentar descubir o que esta errado, tal vez seja algum detalhe no código... em fim espero que possam me ajudar.
Muito obrigado.
Gostei + 0
26/06/2013
Diego Mello
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String respuesta = "";
while ((respuesta = rd.readLine()) != null) {
switch (respuesta) {
case "0":
System.out.println("El talón ha sido creado exitosamente y enviado por mail");
break;
case "1":
System.out.println("El talón ha sido creado exitosamente");
break;
case "2":
System.out.println("Ha habido un error al crear el talón");
break;
case "3":
System.out.println("El token no es correcto");
break;
case "4":
System.out.println("Faltan campos obligatorios");
break;
case "5":
System.out.println("El mail tiene un formato incorrecto");
break;
case "6":
System.out.println("La fecha de vencimiento es incorrecta");
break;
case "7":
System.out.println("La moneda no es valida(858 Pesos o 840 Dólares");
break;
case "8":
System.out.println("El monto no es numérico");
break;
case "9":
System.out.println("El celular tiene un formato incorrecto");
break;
default:
throw new AssertionError();
}
}Gostei + 0
28/06/2013
Marcelo Senaga
Gostei + 0
29/06/2013
Joel Rodrigues
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)