Bueno para empezar, tengo un codigo de varios ejemplos que encontre navegando en la web, solo le implemente algunas cosas como envio de parametros, y agrege ciertas cosas a lo que necesito... mi idea es hacer lo que menciono en el titulo.... "Obtener datos de la web del Seniat"
http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp <<< Esta es la web.
El problema es que al ser .jsp "javascrip" me es diferente a la mayoria de las webs.
Para no enrrollarme tanto lo pondre con ejemplos,
en la web del seniat utilizo el rif J299191388 .. luego le doy "buscar" y luego me genera el nombre de la empresa, etc, etc... Lo que quiero es obtener ese nombre que seguramente esta hecho en alguna parte del body en html (para ello probe usando firebug... bastante util). Quiero capturar ese nombre parsearlo a un String entendible y plasmarlo ya sea en un jtextfield o area... en fin esto sera para el final, lo que primero necesito es lograr el envio de parametros y capturar ese nombre y parsear ese codigo html... No soy de las personas que vienen a pedir cosas asi como asi.. de modo que para el parseo lo que mas he visto por internet es Json y Json...
Bueno ahora el codigo... esto fue en base a muchos ejemplos que encontre en la web, adaptado mas o menos a lo que yo trato de hacer... esta hecho en base a esta web. "Que no es .jsp"
http://www.spritmonitor.de/en/
Código
package conectseniat; import java.io.*; import java.util.ArrayList; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; // Librerias utilizadas, HttpComponents de Apache. // HttpClient... ojo no de las que vienen con el IDE asi que a bajarlas.... /** * * @author Nell */ public class ConectSeniat { /** * @param args the command line arguments */ HttpClient httpclient = new DefaultHttpClient(); HttpResponse response; // Esta página guarda la autentificación en una cookie, por ello lo primero es // acceder a la web donde está el formulario de registro HttpGet httpget = new HttpGet("http://www.spritmonitor.de/en/"); try { response = httpclient.execute(httpget); System.out.println("Estado: " + response.getStatusLine().toString()); // Esto solo para comprobar los estados, los mas comunes 200 / 302 / 404 HttpEntity entity = response.getEntity(); entity = response.getEntity(); if (entity != null) { // Consumimos los datos de la respuesta para liberar al cliente y poder hacer más peticiones entity.consumeContent(); // Especificamos la url donde irán los datos al ejecutarse la acción SUBMIT junto con los datos de autentificación // username y password se corresponden con el nombre de los fields en el formulario HttpPost httppost = new HttpPost("http://www.spritmonitor.de/en/login.html?action=login&;username=username&password=password"); // Enviando parametros por httppost a la web. // Aca segun lo que necesito, "Leer el foro" sobre lo del seniat, el parametro es: // @params p_rif params.add(new BasicNameValuePair("username", "warrior4000")); // mi username // Prueben cambiando algo aca y ejecuten el codigo. params.add(new BasicNameValuePair("password", "wMJHq4A")); // mi password httppost.setEntity(new UrlEncodedFormEntity(params)); response = httpclient.execute(httppost); entity = response.getEntity(); if (entity != null) { // Ya deberíamos estar autentificados, ahora podríamos acceder a cualquier parte del sitio web // al que solo pueden acceder usuarios registrados // Podríamos liberar el cliente... entity.consumeContent(); // y acceder por ejemplo a la página de preferencias del usuario /// Y aca es donde comienza el problema del parseo... es decir lo que quiero obtener del codigo html. /// Leer el foro. /// Supongo de aqui en adelante deberia usar Json, lamentablemente no me he documentado completo sobre Json. HttpGet httpget2 = new HttpGet("http://www.spritmonitor.de/en/my_account.html"); // Aca ingresamos a my profile. por asi decirlo. response = httpclient.execute(httpget2); entity = response.getEntity(); if (entity != null) { // De aqui en adelante por favor leer mi pregunta en el foro. // Yo no se trabajar con Json y muchos dicen que es util para parsear codigo html, por ello les pido su ayuda. instream.close(); // Como hacer para obtener al menos el nombre y no todo el codigo html?, esa es una de mis necesidades - // en lo que respecta a lo del seniat. } } } // Disculpen las except... me da flojera hacer unos propios en ejemplos :(. } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); // TODO Auto-generated catch block e.printStackTrace(); } } StringBuilder sb = new StringBuilder(); try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } e.printStackTrace(); } finally { try { is.close(); e.printStackTrace(); } } return sb.toString(); } }
METAS:
Por favor acepto cualquier ayuda, mi principal meta es enviar el rif a la web del seniat, conozco los parametros que este necesita.
Código
// @param p_rif /* Este es el parametro que usan en la web del seniat y el que necesito enviar.
segundo* - Buscar un medio para capturar solo algo del cuerpo del html "Para obtener el nombre de la empresa en la web del seniat"... tengo pensado Json, cosa que aun no se utilizar.
tercero* - De aqui en adelante me encargo de todo lo demás, conectar a la bd, establecer parametros de busqued, ordenar los datos obtenidos, almacenarlos, etc... y ademas agradeceria mil veces al que me lograra ayudar con mis necesidades ...
PD: agradezco al amigo legnak gracias por nombrarme el foro, .