Java - Descarga masiva XML Sat

 
Vista:
sin imagen de perfil

Descarga masiva XML Sat

Publicado por Francisco Javier (2 intervenciones) el 13/08/2015 22:04:19
Hola amigos buenas tardes, me gustaria saber si hay alguna manera ya en JAVA en la cual pueda extraer los xml de forma masiva del SAT.

Yo se que ya hay aplicaciones, pero me interesa realizar mi propia aplicacion, He utulizado Jsoup para hacer el rellenado de los formularios.

El codigo que utilizo este en base al formulario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Connection.Response loginForm = Jsoup.connect("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaEmisor.aspx")
	.method(Connection.Method.GET)
	.execute();
 
Document doc = Jsoup.connect("https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaEmisor.aspx/Descargar")
	.data("cookieexists", "false")
	.data("ctl00$MainContent$CldFechaInicial2$Calendario_text", fechaI.val())
	.data("ctl00$MainContent$CldFechaInicial2$DdlHora", "00")
	.data("ctl00$MainContent$CldFechaInicial2$DdlMinuto", "00")
	.data("ctl00 $MainContent$CldFechaInicial2$DdlSegundo", "00")
 
	.data("ctl00$MainContent$CldFechaFinal2$Calendario_text", fechaF.val())
	.data("ctl00$MainContent$CldFechaFinal2$DdlHora", horaF.val())
	.data("ctl00$MainContent$CldFechaFinal2$DdlMinuto", minF.val())
	.data("ctl00$MainContent$CldFechaFinal2$DdlSegundo", segF.val())
	.data("ctl00$MainContent$BtnBusqueda","Buscar CFDI")
	.cookies(loginForm.cookies())
	.post();

Como podran ver hago una consulta de xml por fecha, pero no obtengo nada a cambio, no se si tenga algun parametro mal
Muchas gracias
Consulta
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
sin imagen de perfil

Descarga masiva XML Sat

Publicado por Cesar Alberto (3 intervenciones) el 25/08/2015 19:10:00
Yo también estoy empezando a desarrollar un aplicación de descarga masiva en java y estoy usando una ap la de DJ Native Swing que un web browser para obtener las ligas de los xml, esas ya los obtengo sin problemas lo que me falta es la descarga ya que a veces lo hace y a veces no.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ArrayList<String> ligas = new ArrayList<String>();
	int a=0;
	Document doc = Jsoup.parse(browser.getHTMLContent());
	Element ele = doc.getElementById("ctl00_MainContent_PnlResultados");
	System.setProperty("java.net.useSystemProxies", "true");
 
try{
	Elements img_2 = ele.getElementsByClass("BtnDescarga");
	for (Element el : img_2) {
 
 
		for( Attribute attribute : el.attributes() )
		{
			if( attribute.getKey().equalsIgnoreCase("onclick") )
			{
 
				ligas.add("https://portalcfdi.facturaelectronica.sat.gob.mx/"+attribute.getValue().substring(19,535));
 
			}
		}
 
	}
}

y ya obtengo las ligas para la descarga
https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi.aspxDatos=V2UP....etc
mi problema es al momento de descarga le paso las cookies del navegador y al principio todo bien los descargaba sin problemas pero despues ya no lo hace.

Sin-titulo
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
sin imagen de perfil

Descarga masiva XML Sat

Publicado por Gustavo (1 intervención) el 25/08/2015 19:27:54
Un amigo estaba haciendo lo que tu al parecer ya tienes todo, el uso java también y una api muy similar llamada jxbrowser al parecer lo único que hizo fue insertarle un código en javascript al navegador y ya listo lo soluciono super sencillo ya que al loggearte lo haces con el browser deja investigo para poder pasarte el código javascript que utilizo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Descarga masiva XML Sat

Publicado por Cesar Alberto (3 intervenciones) el 27/08/2015 23:12:27
Muchas gracias por tu correo solucione mi problema muchas gracias ya ni sabia que hacer :P
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

Descarga masiva XML Sat

Publicado por javier Robles (2 intervenciones) el 27/08/2015 23:28:16
Hola cesar, me podias apoyar en reeenviarme el correo para continuar con mi aplicacion :(
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
sin imagen de perfil

Descarga masiva XML Sat

Publicado por Cesar Alberto (3 intervenciones) el 28/08/2015 00:11:26
claro ¡¡¡¡¡ ya te lo envié
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

Descarga masiva XML Sat

Publicado por Juan Lophophora Williamsi (3 intervenciones) el 02/09/2015 18:19:18
Te comparto un trozo de mi codigo que lo hace, desarollo una plicacion comercial que funciona bien en esa parte, yo en lo personal uso las apis de Selenium WebDriver de lo cual hay mucha info ahi afuera.

En el siguiente apartado consigo las ligas, y en la funcion "downloadXml()" lo que hago es obtener las cookies del navegador y hacer la peticion con esas coookies para guardar los archivos en disco.

Cabe mencionar que es la misma idea que tu utilizas, tan solo la comparto para ver si este si te funciona, tengo mucho mas codigo si te interesa, mi programa actualmente lo hace todo en segundo plano sin intervencion del usuario, tan solo necesita sus credenciales.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (WebElement row : tr_collection ){
                try {
                    //List<WebElement> imgs = row.findElements(By.xpath("td/div/img"));
                    //List<WebElement> imgs = row.findElements(By.id("BtnDescarga"));
                    WebElement img = row.findElement(By.id("BtnDescarga"));
                    //System.out.println("imgs found: " + imgs.size());
                    String ruta = img.getAttribute("onClick");
                    System.out.println("Ruta: " + ruta);
        //            img.click();
                    String linkXml = baseUrl + "/" + ruta.substring(19,ruta.length() - 18);
                    System.out.println("XML link: " + linkXml);
                    downloadXml(linkXml, cont);
                    cont++;
 
        //            System.out.println("Clicked...");
        //            Thread.sleep(1000);
                }
                catch(NoSuchElementException e){
                    System.out.println("Error: Esta factura no se puede descargar");
                    return -1;
                }
            }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public void downloadXml(String url, int i) throws IOException, ParserConfigurationException, SAXException {
      try {
          String uri =
                  "http://api.flurry.com/eventMetrics/Event?apiAccessCode=YHJBA13CSKTMS6XHTM6M&apiKey=6XQY729FDU1CR9FKXVZP&startDate=2011-2-28&endDate=2011-3-1&eventName=Tip%20Calculated";
 
          URL link = new URL(url);
          HttpURLConnection connection =
                  (HttpURLConnection) link.openConnection();
          connection.setRequestMethod("GET");
          connection.setRequestProperty("Accept", "application/octet-stream");
          connection.setRequestProperty("Cookie", "ASP.NET_SessionId="+driver.manage().getCookieNamed("ASP.NET_SessionId").getValue() + ";" +
          "FedAuthCONT="+driver.manage().getCookieNamed("FedAuthCONT").getValue() + ";" +
          "FedAuthCONT1="+driver.manage().getCookieNamed("FedAuthCONT1").getValue() + ";" +
          "__CSRFCOOKIE"+driver.manage().getCookieNamed("__CSRFCOOKIE").getValue());
 
          String cookie = connection.getRequestProperty("Cokie");
          System.out.println("Cookies: " + cookie);
          InputStream xml = connection.getInputStream();
          String saveFilePath = tempPath + "\\" + i + ".xml";
          FileOutputStream outputStream = new FileOutputStream(saveFilePath);
 
        int bytesRead = -1;
        byte[] buffer = new byte[1024];
        while ((bytesRead = xml.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
 
        outputStream.close();
        xml.close();
 
            System.out.println("File downloaded");
 
//          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//          DocumentBuilder db = dbf.newDocumentBuilder();
//          Document doc = db.parse(xml);
//          System.out.println("Doc:" + doc.toString());
      } catch (MalformedURLException ex) {
          Logger.getLogger(DownloadSat.class.getName()).log(Level.SEVERE, null, ex);
      }
  }

Saludos y a divertirse picando codigo!
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
sin imagen de perfil

Descarga masiva XML Sat

Publicado por José Benigno (1 intervención) el 11/09/2015 17:10:52
Hola buen día, estoy realizando algo similar pero en vb.net, ya funciona pero tengo un pequeño detalle, quiero controlar las horas. Supongamos descargo todo el día primero de enero pero por horas, ¿Cómo podría hacer eso, alguna sugerencia? Gracias 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

Descarga masiva XML Sat

Publicado por Enrique Hdz (1 intervención) el 04/12/2017 18:01:45
Hola.
Sé que es post muy antiguo, pero habrá forma de que me compartan como solucionaron su problema?.

Aún tengo problemas al enviar las cookies para descargar...
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

Descarga masiva XML Sat

Publicado por andrea (1 intervención) el 24/01/2016 03:30:27
hola buenas noches tengo una duda me dejaron como proyecto crear una aplicacion de descargas masivas CFDI del portal sat en JAVA el problema es no se como podria enlazar con el sistema sat si requiero de permisoso algo por el estilo
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

Descarga masiva XML Sat

Publicado por Manuel E (1 intervención) el 31/05/2019 17:38:56
Cesar me pondrias enviar por correo para crear mi aplicacion porfavor :)
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
sin imagen de perfil
Val: 3
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Descarga masiva XML Sat

Publicado por David (1 intervención) el 19/02/2018 21:52:12
Buenas Gustavo, Se que el post es algo viejo pero sera que me puedas pasar el codigo por mi correo?
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

Descarga masiva XML Sat

Publicado por Yazmin Baena (1 intervención) el 17/11/2015 20:50:20
Hola, estoy desarrollando en Java la descarga masiva de XML.
Estoy usando Selenium WebDriver pero no logro hacer la selección de los dropdownlist. Alguien que me ilumine por favor.


He intentado bastante con esta parte

Select selectmonth = new Select( wbSAT.findElement(By.id("ctl00_MainContent_CldFecha_DdlMes")));
selectmonth.selectByIndex(5);

Sin tener éxito

Igual y si me pueden ayudar con la descarga, mostrarme como lo hicieron se los agradeceré mucho
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

Descarga masiva XML Sat

Publicado por Juan Lophophora Williamsi (1 intervención) el 30/11/2015 23:07:55
Hola Yazmin Baena, espero te sirva y entiendas el siguiente chorizo, basicamente lo que intento hacer es invokar a la funcion que modifica el campo de la fecha sin usar los botones del "datepicker" sino mas bien por injección de codigo JavaScript. A mi me funciona con PhantomJS si usas otro explorador no sabria decirte si funciona puesto que me parece que para que funcione con Firefox tuve que hacerle un pequeño parche que no tengo a la mano. Sin mas aqui el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
if (opcion.equalsIgnoreCase("emitidas")) {
            driver.findElement(By.id("ctl00_MainContent_CldFechaInicial2_BtnFecha2")).click();
            System.out.println("waiting for datepicks");
            System.out.println("from: " + fechaInicial + " to: " + fechaFinal);
            if (driver instanceof JavascriptExecutor) {
                        ((JavascriptExecutor) driver)
                                .executeScript("updateDateField('ctl00$MainContent$CldFechaInicial2$Calendario_text', " + "'" + fechaInicial + "'" + ");");
            }
            System.out.println("firstone");
            if (driver instanceof JavascriptExecutor) {
                        ((JavascriptExecutor) driver)
                                .executeScript("updateDateField('ctl00$MainContent$CldFechaFinal2$Calendario_text', " + "'" + fechaFinal + "'" + ");");
            }
            System.out.println("now about to submit search...");
        }
 
        //----------------------------------------------------------------------
                    /*Caso Recibidas*/
        else {
            System.out.println("Metodo recividas");
            Select yearSelection = new Select(driver.findElement(By.id("DdlAnio")));
            if (driver instanceof JavascriptExecutor) {
                        ((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('style', 'width: 80px;');",
                    driver.findElement(By.id("DdlAnio")));
                }
            System.out.println("year selector should be displayed");
            List<WebElement> yearOptions = yearSelection.getOptions();
            yearOptions.stream().map((yearOption) -> {
                System.out.println("this year is: "  + yearOption.getAttribute("value"));
                return yearOption;
            }).forEach((yearOption) -> {
                System.out.println("igual a esto? " + fechaInicial.substring(3, 7));
                if (yearOption.getAttribute("value").equalsIgnoreCase(fechaInicial.substring(3, 7))) {
                    yearOption.click();
                }
            });
            System.out.println("year should be selected");
 
            Select monthSelection = new Select(driver.findElement(By.id("ctl00_MainContent_CldFecha_DdlMes")));
            if (driver instanceof JavascriptExecutor) {
                        ((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('style', 'width: 80px;');",
                    driver.findElement(By.id("ctl00_MainContent_CldFecha_DdlMes")));
                }
            String selectedMonth = monthSelection.getFirstSelectedOption().getText();
            System.out.println("month selector in string: " + monthSelection.toString() );
            List<WebElement> options = monthSelection.getOptions();
            String month;
            if (fechaInicial.substring(0,1).equals("0")){
                month = fechaInicial.substring(1,2);
            }
            else {
                month = fechaInicial.substring(0,2);
            }
 
            System.out.println("month: " + month);
            options.stream().map((option) -> {
                System.out.println("value: " + option.getAttribute("value"));
                return option;
            }).filter((option) -> (option.getAttribute("value").equalsIgnoreCase(month))).map((option) -> {
                System.out.println("is selescted? " + option.getAttribute("selected")) ;
                return option;
            }).map((option) -> {
                System.out.println("selected");
                return option;
            }).forEach((option) -> {
                option.click();
            });

Fijate que la parte importente de lo que quieres conseguir se realiza en estas lineas:
1
2
3
4
if (driver instanceof JavascriptExecutor) {
                        ((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('style', 'width: 80px;');",
                    driver.findElement(By.id("ctl00_MainContent_CldFecha_DdlMes")));
                }
Se modifica el attributo de estilo para que sea visible el campo de la fecha y despues iterar los elementos del elemento "Select" que contiene los doce meses comparandolos con el mes que quieres seleccionar y al encontrarl simplemente hacer click. Saludos y sientete libre de contactarme por mail, ya que no entro mucho a este foro.
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

Descarga masiva XML Sat

Publicado por Pedro Souza (2 intervenciones) el 06/01/2016 00:18:52
Y como haces para descargar día por dia.
Es decir, me queda claro lo siguiente.

Debemos quitar los atributos de CSS que ocultan los Select Originales.
Hecho esto, seleccionamos la fecha deseada y damos clic en Buscar para buscar.

y te dan los comprobantes de esa fecha que capturas en una matriz o array

La cuestión es que al dar clic nuevamente en una fecha y buscar,
pero al querer capturar los valores, es demasiado pronto, pues aun aparecen los valores de la consulta anterior.

Yo quisiera saber si hay manera de esperar en cuanto se quite la leyenda de "Espere un momento" y se actualize la rejilla, hasta entonces ahi ejecutar mi captura de los comprobantes de esa rejilla de esa nueva consulta.



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

Descarga masiva XML Sat

Publicado por Pedro Souza (2 intervenciones) el 11/01/2016 19:48:38
Yo veo que en el código usan ctl00_MainContent_UpdateProgress1 que es el control que muestra el progreso. y tiene dos estados.

Predeterminado o en su estado de reposo, su atributo CSS es display: none
y mientras se esta ejecutando una consulta, el atributo CSS es width: 45px

También veo que ustedes usan un While para procesarlo,mientras el atributo es diferente a display:none.

Pero la verdad no me queda muy claro para al finalizar el bucle,entonces proseguir a cambiar de fecha.


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

Descarga masiva XML Sat

Publicado por Juan Lophophora Williamsi (1 intervención) el 29/01/2016 00:48:53
Me parece que te convendria mas comenzar de nuevo en vez de meter los valores y esperar a que refresque el grid.
aunque en definitiva debe haber manera de esperar a que cargue, solo ubica el elemento que realiza de animacion de cargar y espera a que muera para proceder.
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

Descarga masiva XML Sat

Publicado por asencio (1 intervención) el 11/02/2016 13:46:32
Hola Pedro Souza no se si ya resolviste tu problema, en todo caso lo que tienes que hacer es un while con la opción de DoEvents(), esto lo único que hace es dar tiempo a que se actualice el estado de los controles posterior al postback que genera el servidor del sat, por ejemplo en .net es así:

1
2
3
4
5
6
7
8
9
10
docto.GetElementById("ctl00_MainContent_RdoFechas").InvokeMember("Click");
while (docto.GetElementById("ctl00_MainContent_RdoFechas").GetAttribute("onclick") != "")
{
       //Espera a que se procese la selección del tipo de busqueda
       Application.DoEvents();
}
...
...asignar las fechas
...
docto.GetElementById("ctl00_MainContent_BtnBusqueda").InvokeMember("Click");


Espero les sea de ayuda. 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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 18/03/2016 01:59:28
hola Juan, una pregunta como le hiciste con java para que al momento de leer la page https://portalcfdi.facturaelectronica.sat.gob.mx/, no te mande a esta https://cfdiau.sat.gob.mx/nidp/app?sid=0, aparte no se si recuperas cookis y la sesion me podrias ayudar en eso.

Yo mando los parametros por post el usuario y contraseña, pero al momento de ver la apguina me envia a la paguina que te agrego https://cfdiau.sat.gob.mx/nidp/app?sid=0

tendras algun ejemplo para direccionar y obtener las cookies, no se bien como funcione, espero me puedas ayudar

Gracias
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 18/03/2016 00:21:06
hola Yasmin, una pregunta como le hiciste con java para que al momento de leer la page https://portalcfdi.facturaelectronica.sat.gob.mx/, no te mande a esta https://cfdiau.sat.gob.mx/nidp/app?sid=0, aparte no se si recuperas cookis y la sesion me podrias ayudar en eso.

Yo mando los parametros por post el usuario y contraseña, pero al momento de ver la apguina me envia a la paguina que te agrego https://cfdiau.sat.gob.mx/nidp/app?sid=0

Gracias
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

Descarga masiva XML Sat

Publicado por eder (1 intervención) el 06/04/2016 16:36:55
Hola que tal, yo estoy usando htmlunit y ya hago la descarga el unico problema es que solo me traigo lo del mes de enero,
el problema es que he intentado ya de varias formas para poder hacer la seleccion del item que corresponde al mes, pero no me lo hacia, encontre otra manera recientemete y segun al usar page.asText() ya me muestra la el cambio del item del mes, ya no me muestra el Mes 01 si no que ya le coloca el valor que elijo, despues al dar click al boton de submit no me toma en cuenta dicho cambio del item de mes.Posteriormente utilizo otravez la funcion .aText() y me muestra que el item se regresa a Mes 01
Pongo el fragmento del codigo, espero me puedan ayudar o darme algun consejo.


HtmlRadioButtonInput fechaEmision = page.getFirstByXPath("//input[@value='RdoFechas']");

fechaEmision.setChecked(true);//seleccion de radio button de fechas

List<?> x = page.getByXPath("//div");
HtmlDivision divcam = (HtmlDivision) x.get(22);//div del item select mes


HtmlElement a = divcam.getFirstByXPath("//a[@rel='03']");//mes seleccionado
a.click().getWebResponse();
a.fireEvent(Event.TYPE_CHANGE);

System.out.println("CAMBIO DE MES " + page.asText());//aqui ya veo el texto Y MUESTRA LA SELECION DEL MES 03
Thread.sleep(5000);

HtmlSubmitInput button = (HtmlSubmitInput) page.getElementByName("ctl00$MainContent$BtnBusqueda"); //BOTON QUE REALIZA LA COSULTA

button.click().getWebResponse();

page.asText();//aqui me muestra el resultado de la consulta pero el item de mes se regresa a 01 y por tanto solo me trae los resultados de enro
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

Descarga masiva XML Sat

Publicado por Juan Lophophora Williamsi (3 intervenciones) el 16/04/2016 03:12:22
Hola leonardo, si mal no recuerdo para poder acceder al login del sat tuve que tomar la direccion a la que te envia desde una pagina anterior pero no la tengo a la mano, si aun te interesa mandame un email y buscare el proyecto (lo hice el año pasado). la parte que preguntas de las cookies es necesaria para la descarga unicamente, es lo que poestee mas arriba, aqui pego el trozo de las cookies(trozo del mismo que esta arriba):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
URL link = new URL(url);
 
          HttpURLConnection connection =
 
                  (HttpURLConnection) link.openConnection();
 
          connection.setRequestMethod("GET");
 
          connection.setRequestProperty("Accept", "application/octet-stream");
 
          connection.setRequestProperty("Cookie", "ASP.NET_SessionId="+driver.manage().getCookieNamed("ASP.NET_SessionId").getValue() + ";" +
 
          "FedAuthCONT="+driver.manage().getCookieNamed("FedAuthCONT").getValue() + ";" +
 
          "FedAuthCONT1="+driver.manage().getCookieNamed("FedAuthCONT1").getValue() + ";" +
 
          "__CSRFCOOKIE"+driver.manage().getCookieNamed("__CSRFCOOKIE").getValue());
 
 
 
          String cookie = connection.getRequestProperty("Cokie");
 
          System.out.println("Cookies: " + cookie);
 
          InputStream xml = connection.getInputStream();
 
          String saveFilePath = tempPath + "\\" + i + ".xml";
 
          FileOutputStream outputStream = new FileOutputStream(saveFilePath);
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 19/04/2016 22:56:57
Hola juan, si estoy interesado en lo que me escribes si podrias ayudarme a pasar tu codigo, te envio este mensaje muchas gracias todo lo estoy tratando de hacer con java. gracias
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

Descarga masiva XML Sat

Publicado por jorge Acevedo (1 intervención) el 01/06/2016 00:41:02
hola amigo yo acabo de desarrollar excatemente lo mismo y me esta funcionando bien es con una libreria que se llama jsoup
https://jsoup.org/

y encontre en la web este http://admin-cfdi.readthedocs.io/es/master/devel.html#descarga-de-facturas-del-sat

es un api que te descarga masivamente los xml y funciona muy bien solo q esta desarrollado en python

entonces lo que hice fue traducir el codigo de python a java y listo actualmente ya lo tengo funcionando en java
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 01/06/2016 17:27:46
Hola buenos dias Jorge,

Oye yo tambien estoy tratando de hacer eso, pero me podrias poner un ejemplo de como mantienes la seccion con la libreria para que te permita direccioanr a la paguina donde puedes descargar el los CFDI.

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

Descarga masiva XML Sat

Publicado por jose (1 intervención) el 16/04/2018 17:24:53
Hola me encantaría tener una copia de tu código, estoy intentando hacer esto pero me he topado con pared. varias veces

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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 14/06/2016 02:13:44
Hola Carlos crees que me puedas ayudar parece que tu ya avanzaste, como mandar lso cookies, para que me regrese los datos tengo esto.
Este es la parte donde manda los cookies, pero no funciona

conn.setRequestProperty("Cookie", "ASP.NET_SessionId="+"D03279B3F7383E0D6332720A57F3F5D0" + ";" +
"FedAuthCONT="+"~03~02fbf~1B~17~14ps~7B~09" + ";" +
"FedAuthCONT1="+"rd3o00000000000000000000ffff0a3834c6o443" + ";" +
"__CSRFCOOKIE"+"PBDGCBPABLEFDIIMCDPMENJGHKCBDGNHHPBEHHDNFOJDGNKGDFFDJMLINHLALGLPLELMHKKCEMHPCPHDDDAIHJKLJGBBJEGNNAIELNOGJIFEGCGKBCIJAPIAIADHLNDI");


Y me manda este mensaje

Sending 'GET' request to URL : https://portalcfdi.facturaelectronica.sat.gob.mx/
Response Code : 302
<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation/?wa=wsignin1.0&amp;wtrealm=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx&amp;wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&amp;wct=2016-06-13T23%3a17%3a29Z&amp;wreply=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx%2f">here</a>.</h2></body></html>}



Espero me puedas ayudar o alguien mas.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class HttpUrlConnectionExample {
 
private List<String> cookies;
private HttpsURLConnection conn;
 
private final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36";
 
public static void main(String[] args) throws Exception {
 
String url = "https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0";
String gmail = "https://portalcfdi.facturaelectronica.sat.gob.mx/";
 
HttpUrlConnectionExample http = new HttpUrlConnectionExample();
CookieHandler.setDefault(new CookieManager());
 
String page = http.GetPageContent(url);
String postParams = http.getFormParams(page, "XXXXXXXXXX", "XXXxXXXXX");
 
http.sendPost(url, postParams);
 
// 3. success then go to gmail.
String result = http.GetPageContent(gmail);
System.out.println(result);
 
}
 
private void sendPost(String url, String postParams) throws Exception {
 
System.out.println(url);
System.out.println(postParams);
 
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
 
// Acts like a browser
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Host", "portalcfdi.facturaelectronica.sat.gob.mx");
conn.setRequestProperty("User-Agent", USER_AGENT);
conn.setRequestProperty("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
 
conn.setRequestProperty("Cookie", "ASP.NET_SessionId="+"D03279B3F7383E0D6332720A57F3F5D0" + ";" +
"FedAuthCONT="+"~03~02fbf~1B~17~14ps~7B~09" + ";" +
"FedAuthCONT1="+"rd3o00000000000000000000ffff0a3834c6o443" + ";" +
"__CSRFCOOKIE"+"PBDGCBPABLEFDIIMCDPMENJGHKCBDGNHHPBEHHDNFOJDGNKGDFFDJMLINHLALGLPLELMHKKCEMHPCPHDDDAIHJKLJGBBJEGNNAIELNOGJIFEGCGKBCIJAPIAIADHLNDI");
 
 
 
 
for (String cookie : this.cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Referer", "https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));
conn.setFollowRedirects(false);
 
conn.setDoOutput(true);
conn.setDoInput(true);
 
// Send post request
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
 
int responseCode = conn.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);
 
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
 
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// System.out.println(response.toString());
 
}
 
public String getFormParams(String html, String username, String password)
throws UnsupportedEncodingException {
 
 
 
System.out.println("Extracting form's data...");
 
Document doc = Jsoup.parse(html);
 
// Google form id
//Element loginform = doc.getElementById("IDPLogin");
//System.out.println("Extracting form's data..." +loginform);
Elements inputElements = doc.getElementsByTag("input");
 
List<String> paramList = new ArrayList<String>();
 
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
 
if (key.equals("Ecom_User_ID"))
value = username;
else if (key.equals("Ecom_Password"))
value = password;
paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
}
 
// build parameters list
StringBuilder result = new StringBuilder();
for (String param : paramList) {
if (result.length() == 0) {
result.append(param);
} else {
result.append("&" + param);
}
}
return result.toString();
}
 
public List<String> getCookies() {
return cookies;
}
 
public void setCookies(List<String> cookies) {
this.cookies = cookies;
}
 
 
 
 
 
private String GetPageContent(String url) throws Exception {
 
URL obj = new URL(url);
conn = (HttpsURLConnection) obj.openConnection();
 
// default is GET
conn.setRequestMethod("GET");
 
conn.setUseCaches(false);
 
// act like a browser
conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
conn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
conn.setRequestProperty("Accept-Language", "es-ES,es;q=0.8,en;q=0.6");
conn.setFollowRedirects(false);
 
if (cookies != null) {
for (String cookie : this.cookies) {
conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
}
}
String cookie = conn.getRequestProperty("Cookie");
System.out.println(cookie);
int responseCode = conn.getResponseCode();
 
 
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
 
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
 
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
 
// Get the response cookies
setCookies(conn.getHeaderFields().get("Set-Cookie"));
 
return response.toString();
 
}
 
 
}
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

Descarga masiva XML Sat

Publicado por Leonardo (12 intervenciones) el 15/06/2016 00:33:40
Hola Jorge,

tu que has desarrollado tu aplicacion con jsoup podrias ayudarme a conectarme al sat para descargar los cfdi, he llegado hasta aqui.

Sending 'GET' request to URL : https://portalcfdi.facturaelectronica.sat.gob.mx/
Response Code : 302
<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation/?wa=wsignin1.0&amp;wtrealm=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx&amp;wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&amp;wct=2016-06-13T23%3a17%3a29Z&amp;wreply=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx%2f">here</a>.</h2></body></html>
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

Descarga masiva XML Sat

Publicado por Armando Reyna (1 intervención) el 16/06/2016 03:08:49
Hola Jorge, podrías compartir el código Java?
Te lo agradecería mucho!

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

Descarga masiva XML Sat

Publicado por Francisco (1 intervención) el 16/10/2017 03:19:36
Hola Jorge,

Crees que me puedas compartir tu codigo, necesito generar este proceso y montarla en un PL/SQL.

Muchas gracias.
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

Descarga masiva XML Sat

Publicado por Jose (1 intervención) el 29/05/2018 03:58:58
Hola Jorge cres que puedas pasarme una copia de tu código 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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 08/06/2016 01:35:50
Hola Juan,

Buenas tardes, te envié un correo.

espero lo puedas ver
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 21/06/2016 07:10:40
Hola Juan,

Me podrias ayudar en como recueras los cookies que mensionas en tu mensaje.

ASP.NET_SessionId
FedAuthCONT
FedAuthCONT1
__CSRFCOOKIE

ya que al momento de recuperar las cookies, solo obtengo esto


Key : Server ,Value : Apache-Coyote/1.1
Key : Set-Cookie ,Value : JSESSIONID=371A5306F783DDB50941A607921B5F06; Path=/nidp/; Secure; HttpOnly
Key : Set-Cookie ,Value : UrnNovellNidpClusterMemberId=~03~02fbf~1B~17~14ps~7B~07; Path=/nidp
Key : Pragma ,Value : No-cache
Key : Cache-Control ,Value : no-cache
Key : Content-Type ,Value : text/html;charset=ISO-8859-1
Key : Content-Length ,Value : 421
Key : Date ,Value : Tue, 21 Jun 2016 05:10:31 GMT
Key : Set-Cookie ,Value : F5-STICKY-IDPW-CFDI-PTO443=rd3o00000000000000000000ffff0a3834c4o443; expires=Tue, 21-Jun-2016 05:53:31 GMT; path=/
Key : Set-Cookie ,Value : bbbbbbbbbbbbbbb=GBFKGHEEFOFNKJKMODNEGDPNCNHFDEHIHKJCJNODHDEDJJLLDMIOEBPNGONAIAKCMLJIPMBFIGBEEJLCPMOLLEELNIJHIGBJBGOCLAPPDMCELPEDADFLDJJJLFBABCFF; HttpOnly; secure



Que son los de apache quedirecciona la paguina.
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

Descarga masiva XML Sat

Publicado por Carlos (2 intervenciones) el 14/06/2016 00:18:32
Hola Eder,
¿Pudiste resolver el problema?
Tengo exactamente el mismo problema,
Gracias
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 14/06/2016 01:23:25
Hola Carlos crees que me puedas ayudar parece que tu ya avanzaste, como mandar lso cookies, para que me regrese los datos tengo esto.
Este es la parte donde manda los cookies, pero no funciona

conn.setRequestProperty("Cookie", "ASP.NET_SessionId="+"D03279B3F7383E0D6332720A57F3F5D0" + ";" +
"FedAuthCONT="+"~03~02fbf~1B~17~14ps~7B~09" + ";" +
"FedAuthCONT1="+"rd3o00000000000000000000ffff0a3834c6o443" + ";" +
"__CSRFCOOKIE"+"PBDGCBPABLEFDIIMCDPMENJGHKCBDGNHHPBEHHDNFOJDGNKGDFFDJMLINHLALGLPLELMHKKCEMHPCPHDDDAIHJKLJGBBJEGNNAIELNOGJIFEGCGKBCIJAPIAIADHLNDI");


Y me manda este mensaje

Sending 'GET' request to URL : https://portalcfdi.facturaelectronica.sat.gob.mx/
Response Code : 302
<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation/?wa=wsignin1.0&amp;wtrealm=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx&amp;wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&amp;wct=2016-06-13T23%3a17%3a29Z&amp;wreply=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx%2f">here</a>.</h2></body></html>}



Espero me puedas ayudar o alguien mas.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class HttpUrlConnectionExample {
 
  private List<String> cookies;
  private HttpsURLConnection conn;
 
  private final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36";
 
  public static void main(String[] args) throws Exception {
 
	String url = "https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0";
	String gmail = "https://portalcfdi.facturaelectronica.sat.gob.mx/";
 
	HttpUrlConnectionExample http = new HttpUrlConnectionExample();
	CookieHandler.setDefault(new CookieManager());
 
	String page = http.GetPageContent(url);
	String postParams = http.getFormParams(page, "XXXXXXXXXX", "XXXxXXXXX");
 
	http.sendPost(url, postParams);
 
	// 3. success then go to gmail.
	String result = http.GetPageContent(gmail);
	System.out.println(result);
 
  }
 
  private void sendPost(String url, String postParams) throws Exception {
 
	  System.out.println(url);
	  System.out.println(postParams);
 
		URL obj = new URL(url);
		conn = (HttpsURLConnection) obj.openConnection();
 
		// Acts like a browser
		conn.setUseCaches(false);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Host", "portalcfdi.facturaelectronica.sat.gob.mx");
		conn.setRequestProperty("User-Agent", USER_AGENT);
		conn.setRequestProperty("Accept",
			"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
 
		conn.setRequestProperty("Cookie", "ASP.NET_SessionId="+"D03279B3F7383E0D6332720A57F3F5D0" + ";" +
		          "FedAuthCONT="+"~03~02fbf~1B~17~14ps~7B~09" + ";" +
		          "FedAuthCONT1="+"rd3o00000000000000000000ffff0a3834c6o443" + ";" +
		          "__CSRFCOOKIE"+"PBDGCBPABLEFDIIMCDPMENJGHKCBDGNHHPBEHHDNFOJDGNKGDFFDJMLINHLALGLPLELMHKKCEMHPCPHDDDAIHJKLJGBBJEGNNAIELNOGJIFEGCGKBCIJAPIAIADHLNDI");
 
 
 
 
		for (String cookie : this.cookies) {
			conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
		}
		conn.setRequestProperty("Connection", "keep-alive");
		conn.setRequestProperty("Referer", "https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation");
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		conn.setRequestProperty("Content-Length", Integer.toString(postParams.length()));
		conn.setFollowRedirects(false);
 
		conn.setDoOutput(true);
		conn.setDoInput(true);
 
		// Send post request
		DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
		wr.writeBytes(postParams);
		wr.flush();
		wr.close();
 
		int responseCode = conn.getResponseCode();
		System.out.println("\nSending 'POST' request to URL : " + url);
		System.out.println("Post parameters : " + postParams);
		System.out.println("Response Code : " + responseCode);
 
		BufferedReader in =
	             new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String inputLine;
		StringBuffer response = new StringBuffer();
 
		while ((inputLine = in.readLine()) != null) {
			response.append(inputLine);
		}
		in.close();
		// System.out.println(response.toString());
 
	  }
 
  	public String getFormParams(String html, String username, String password)
		throws UnsupportedEncodingException {
 
 
 
	System.out.println("Extracting form's data...");
 
	Document doc = Jsoup.parse(html);
 
	// Google form id
	//Element loginform = doc.getElementById("IDPLogin");
	//System.out.println("Extracting form's data..." +loginform);
	Elements inputElements = doc.getElementsByTag("input");
 
	List<String> paramList = new ArrayList<String>();
 
	for (Element inputElement : inputElements) {
		String key = inputElement.attr("name");
		String value = inputElement.attr("value");
 
		if (key.equals("Ecom_User_ID"))
			value = username;
		else if (key.equals("Ecom_Password"))
			value = password;
		paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8"));
	}
 
	// build parameters list
	StringBuilder result = new StringBuilder();
	for (String param : paramList) {
		if (result.length() == 0) {
			result.append(param);
		} else {
			result.append("&" + param);
		}
	}
	return result.toString();
  }
 
  public List<String> getCookies() {
	return cookies;
  }
 
  public void setCookies(List<String> cookies) {
	this.cookies = cookies;
  }
 
 
 
 
 
  private String GetPageContent(String url) throws Exception {
 
		URL obj = new URL(url);
		conn = (HttpsURLConnection) obj.openConnection();
 
		// default is GET
		conn.setRequestMethod("GET");
 
		conn.setUseCaches(false);
 
		// act like a browser
		conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
		conn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
		conn.setRequestProperty("Accept-Language", "es-ES,es;q=0.8,en;q=0.6");
		conn.setFollowRedirects(false);
 
		if (cookies != null) {
			for (String cookie : this.cookies) {
				conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]);
			}
		}
		 String cookie = conn.getRequestProperty("Cookie");
		 System.out.println(cookie);
		int responseCode = conn.getResponseCode();
 
 
		System.out.println("\nSending 'GET' request to URL : " + url);
		System.out.println("Response Code : " + responseCode);
 
		BufferedReader in =
	            new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String inputLine;
		StringBuffer response = new StringBuffer();
 
		while ((inputLine = in.readLine()) != null) {
			response.append(inputLine);
		}
		in.close();
 
		// Get the response cookies
		setCookies(conn.getHeaderFields().get("Set-Cookie"));
 
		return response.toString();
 
	  }
 
 
}
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

Descarga masiva XML Sat

Publicado por Carlos (2 intervenciones) el 14/06/2016 17:04:07
Leonardo,
Yo estoy utilizando Python,
Ya puedo hacer todo el ciclo de lo que necesito hasta la descarga, pero al igual que Eder, solo me funciona para Enero 2016,
Al parecer hay algún post-back que me esta haciendo falta o la ejecución de algún Javascript,
Me parece que en tu codigo hace falta la parte de redireccionamiento al WS-Federation,
Lo que yo hice fue:
1) Hacer un get a: "https://portalcfdi.facturaelectronica.sat.gob.mx/"
2) Hacer un Post a:"https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0"
Con las credenciales "Ecom_User_ID" y "Ecom_Password" dentro del payload.
El Response de esto me entrega 3 parametros de WS-Federation, posterior al redireccionamiento: wa, wresult y wctx,
estos 3 parametros los limpio de los Inputs del HTML response.
3) Hago un Post a "https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation" y dentro del Payload meto wa, wresult y wctx que obtuve en el paso anterior, en formato string.
4) En este paso ya entre al sistema, por lo que finalmente hago un get a: "https://portalcfdi.facturaelectronica.sat.gob.mx/ConsultaReceptor.aspx"

Con la libreria requests de Python, las cookies se mantienen dentro de la sesión por lo que ya no tengo que adjuntarlo a los headers como tu haces con JSOUP.

Espero que estos conejos te sirvan de algo,
Saludos,
Carlos.
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

Descarga masiva XML Sat

Publicado por Leonardo (12 intervenciones) el 15/06/2016 00:37:41
Gracias, lo intentare espero vaya en buen camino.
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 21/06/2016 07:20:46
Hola una pregunta, form es el que limpias para obtener los tres paramentros
wa, wresult y wctx, a mi me aparecen dos form diferenetes en distintos esenarios, en los dos biene los tres parametros que mensionas.

este es uno

<html><head><title>PostIt</title><META HTTP-EQUIV="expires" CONTENT="0"></head><body><form method="POST" enctype="application/x-www-form-urlencoded" action="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation">
<input type="hidden" name="wa" value="wsignin1.0"/>
<input type="hidden" name="wresult" value="<xml>........."/>
<input type="hidden" name="wctx" value="cHI9d3Nm......."/>
</form><script language="JavaScript"> <!-- document.forms[0].submit(); --></script></body></html>

Y este otro que es difernete.

<html><head><title>Object moved</title></head>
<body><h2>Object moved to <a href="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation/?wa=wsignin1.0&amp;wtrealm=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx&amp;wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&amp;wct=2016-06-21T05%3a12%3a55Z&amp;wreply=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx%2f">here</a>.</h2></body></html>


Y por ultimo cuando envias los cookies envias estos cokkies y si es asi como los obtienes y como los envias por que direcciona a un server apache y no obtengo estas cookies.

ASP.NET_SessionId
FedAuthCONT
FedAuthCONT1
__CSRFCOOKIE
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

Descarga masiva XML Sat

Publicado por Carlos (1 intervención) el 06/07/2016 19:47:12
Hola Cesar Alberto comienzo a realizar mi propia app de descarga masiva y de la misma manera estoy utilizando Native Swing. Crees poder ayudarme con información por favor te lo agradecería!
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

Descarga masiva XML Sat

Publicado por leonardo (12 intervenciones) el 21/06/2016 07:32:32
Hola una pregunta, form es el que limpias para obtener los tres paramentros
wa, wresult y wctx, a mi me aparecen dos form diferenetes en distintos esenarios, en los dos biene los tres parametros que mensionas.

este es uno

<html><head><title>PostIt</title><META HTTP-EQUIV="expires" CONTENT="0"></head><body><form method="POST" enctype="application/x-www-form-urlencoded" action="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation">
<input type="hidden" name="wa" value="wsignin1.0"/>
<input type="hidden" name="wresult" value="<xml>........."/>
<input type="hidden" name="wctx" value="cHI9d3Nm......."/>
</form><script language="JavaScript"> <!-- document.forms[0].submit(); --></script></body></html>

Y este otro que es difernete.

<html><head><title>Object moved</title></head>
<body><h2>Object moved to <a href="https://cfdicontribuyentes.accesscontrol.windows.net/v2/wsfederation/?wa=wsignin1.0&amp;wtrealm=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx&amp;wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&amp;wct=2016-06-21T05%3a12%3a55Z&amp;wreply=https%3a%2f%2fportalcfdi.facturaelectronica.sat.gob.mx%2f">here</a>.</h2></body></html>


Y por ultimo cuando envias los cookies envias estos cokkies y si es asi como los obtienes y como los envias por que direcciona a un server apache y no obtengo estas cookies.

ASP.NET_SessionId
FedAuthCONT
FedAuthCONT1
__CSRFCOOKIE
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

Descarga masiva XML Sat

Publicado por JOSE ANIBAL MOHR (3 intervenciones) el 26/10/2016 22:57:18
ME INTERESARIA SABER SI HAS LOGRADO LA RUTINA DE LA DESCARGA MASIVA DE XML EN EL SAT ?
PARA HACER NEGOCIOS CONTIGO.
GRACIAS
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

Descarga masiva XML Sat

Publicado por JLW (3 intervenciones) el 17/04/2017 04:59:51
Yo lo he logrado, contactame.
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 Daniel Alejandro

Descarga masiva XML Sat

Publicado por Daniel Alejandro (1 intervención) el 23/06/2017 18:53:31
Hola, estoy comenzando a desarrollar una aplicacion para descarga masica de XML desde el SAT, me podrian dar algunas recomendaciones de como iniciar, estoy tratando con jsoup. Gracias. 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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Descarga masiva XML Sat

Publicado por cesar (4 intervenciones) el 27/04/2019 19:24:45
Hola Colegas, se que el post es algo antiguo, pero quería preguntar si alguien ha logrado bajar los XML, ya que he logrado bajar los archivos, pero en lugar de la información, me parecen con este error

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
    <head>
        <META HTTP-EQUIV="expires" CONTENT="0">
    </head>
    <body>
        <form method="POST" enctype="application/x-www-form-urlencoded" action="/nidp/wsfed/ep?id=SATUPCFDiCon&sid=0&option=credential&sid=0"></form>
        <script language="JavaScript">
            <!--
                document.forms[0].submit();
            -->
        </script>
    </body>
</html>
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

Descarga masiva XML Sat

Publicado por Leon (1 intervención) el 23/08/2019 02:18:13
Hola, estoy usando el sat scraper y todo funcionaba bien pero ahora me da este error:

Descarga terminada con error: cURL error 6: Could not resolve host: cfdicontribuyentes.accesscontrol.windows.net

Alguien sabe si cambio el URL?
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

Descarga masiva XML Sat

Publicado por jon (1 intervención) el 21/04/2021 00:02:46
yo tengo este mismo problema!!!
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