Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Formulario post - Conocer url para realizar envío masivo

Estas en el tema de Formulario post - Conocer url para realizar envío masivo en el foro de PHP en Foros del Web. Hola, tengo la siguiente web en la que aparece un formulario para descarga de facturas en formato pdf. http://www.zaragoza.es/consultaRecib...oAguaPdf.faces Por otro lado tengo un array ...
  #1 (permalink)  
Antiguo 16/05/2020, 11:21
 
Fecha de Ingreso: octubre-2011
Mensajes: 205
Antigüedad: 8 años, 7 meses
Puntos: 1
Formulario post - Conocer url para realizar envío masivo

Hola,

tengo la siguiente web en la que aparece un formulario para descarga de facturas en formato pdf.

http://www.zaragoza.es/consultaRecib...oAguaPdf.faces

Por otro lado tengo un array con los tres campos que aparecen obligatorios en el formulario (Nº de poliza, NIF, Importe). Tengo cientos de recibos y quiero automatizarlo para no teclear en la pagina web uno a uno y que me realice la descarga de los pdf automaticamente.

Cuando tecleo uno correcto se abre el pdf en el navegador en la misma url, no abre ninguna pestaña nueva.

Lo que he visto del formulario a través del código fuente es lo siguiente, el form con el action y los tres input obligatorios que entiendo es lo que tengo que enviar:

Código PHP:
<form id="formConsultaReciboPdf" method="post" action="/consultaRecibosWeb/consultaReciboAguaPdf.faces" enctype="application/x-www-form-urlencoded">

<
input id="formConsultaReciboPdf:nFijo" name="formConsultaReciboPdf:nFijo" type="text" value="" />

<
input id="formConsultaReciboPdf:dni" name="formConsultaReciboPdf:dni" type="text" value="" />

<
input id="formConsultaReciboPdf:importe" name="formConsultaReciboPdf:importe" type="text" value="" />

<
input type="hidden" name="formConsultaReciboPdf_SUBMIT" value="1" />
</
form
Se agradece cualquiera ayuda, en principio para hacer el post y abrir el fichero. Luego la posterior descarga ya a mi ordenador entiendo que es otro problema.

Gracias. Un saludo
  #2 (permalink)  
Antiguo 16/05/2020, 12:13
 
Fecha de Ingreso: abril-2006
Mensajes: 426
Antigüedad: 14 años, 1 mes
Puntos: 96
Respuesta: Formulario post - Conocer url para realizar envío masivo

si no usas javascript, para abrirlo en una pagina aparte o pestaña nueva, en el formulario necesitas usar el atributo "target" con ese atributo le indicas que los datos del formulario debera ser procesada en una pagina X iframe o en tu caso una pagina nueva

https://www.w3schools.com/tags/att_form_target.asp

Código HTML:
Ver original
  1. <form action="/action_page.php" method="post" target="_blank">

eso si no tienes javascript, que preprocesen los datos del formulario que generalmente lo hacen para hacer el tema de AJAX y dar mas dinamismo a la web, de ser asi tendrias que localizar las funciones y luego ahi realizar las modificaciones necesarias como un

Código Javascript:
Ver original
  1. window.open
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 16/05/2020, 14:58
 
Fecha de Ingreso: octubre-2011
Mensajes: 205
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Formulario post - Conocer url para realizar envío masivo

Hola,

gracias por la respuesta pero creo que no lo has entendido o no me he explicado.

El link que pongo no es de mi web, es de un Ayuntamiento que ofrece las facturas de servicios (agua, basuras, tec) a traves de un formulario en el que completas 3 campos y si localiza una coincidencia te devuelve el pdf con la factura.

Lo que yo quiero hacer pero no tengo ni idea como empezar, es si a traves de algun script en php o python, puedo hacer un post de forma masiva (bucle for) con los tres campos obligatorios del formulario (Nº de poliza, NIF, Importe) y se me descarguen los pdf sin tener que acceder a la web.

A traves de firebug no encuentro nada que me indique como realizar ese post.

Gracias
  #4 (permalink)  
Antiguo 16/05/2020, 15:18
 
Fecha de Ingreso: abril-2006
Mensajes: 426
Antigüedad: 14 años, 1 mes
Puntos: 96
Respuesta: Formulario post - Conocer url para realizar envío masivo

Cita:
Iniciado por dasapa Ver Mensaje
Hola,

gracias por la respuesta pero creo que no lo has entendido o no me he explicado.

El link que pongo no es de mi web, es de un Ayuntamiento que ofrece las facturas de servicios (agua, basuras, tec) a traves de un formulario en el que completas 3 campos y si localiza una coincidencia te devuelve el pdf con la factura.

Lo que yo quiero hacer pero no tengo ni idea como empezar, es si a traves de algun script en php o python, puedo hacer un post de forma masiva (bucle for) con los tres campos obligatorios del formulario (Nº de poliza, NIF, Importe) y se me descarguen los pdf sin tener que acceder a la web.

A traves de firebug no encuentro nada que me indique como realizar ese post.

Gracias
a vale puedes investigar sobre "web scraping" que es lo que necesitas, puedes hacerlo tanto en PHP o PYTHON o en el lenguaje de tu preferencia. aunque puede que la web tenga algun antiBOT que evite la extraccion de datos en ese caso tendras que hacerlo con ELECTRON.js que es un CHROME al que puedes manipular a gusto

el tema es mas largo, si no quieres liarte con ello, yo creo que aca ay profesionales freelancers en los que me incluyo en hacer el trabajo por X monto, pero bueno todo depende de ti, si quieres hacerlo solo

investiga sobre PHP CURL, PYTHON libreria HTTP, SSL, HTTPS, Cookies, y Headers HTTP, con ello bastara de sobra , ay tambien frameworks que aligeran un poco la carga
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #5 (permalink)  
Antiguo 16/05/2020, 15:18
 
Fecha de Ingreso: abril-2011
Mensajes: 125
Antigüedad: 9 años, 2 meses
Puntos: 44
Respuesta: Formulario post - Conocer url para realizar envío masivo

Cita:
si a traves de algun script en php o python, puedo hacer un post de forma masiva (bucle for) con los tres campos obligatorios del formulario (Nº de poliza, NIF, Importe) y se me descarguen los pdf sin tener que acceder a la web.
Puedes automatizarlo con cURL, pero ten cuidado no les vayas a tirar abajo el servidor

En un sitio seguro deberían tener captcha para evitar automatizaciones de este tipo.

Un ejemplo de cómo se hace:

https://stackoverflow.com/a/22165451/13312580

Solamente faltaría enviar los datos via POST. Para ello debes utilizar curl_setopt:

Código PHP:
Ver original
  1. // ...
  2. curl_setopt($ch, CURLOPT_POST, 1);
  3. curl_setopt($ch, CURLOPT_POSTFIELDS, "formConsultaReciboPdf:nFijo=valor&formConsultaReciboPdf:dni=valor&formConsultaReciboPdf_SUBMIT=1");
  4. // ...

El código completo sería algo así:

Código PHP:
Ver original
  1. $source = "http://www.zaragoza.es/consultaRecibosWeb/consultaReciboAguaPdf.faces";
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, $source);
  4. curl_setopt($ch, CURLOPT_POST, 1);
  5. curl_setopt($ch, CURLOPT_POSTFIELDS, "formConsultaReciboPdf:nFijo=valor&formConsultaReciboPdf:dni=valor&formConsultaReciboPdf_SUBMIT=1");
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // esto en tu caso puede ser necesario
  8. $data = curl_exec ($ch);
  9. $error = curl_error($ch);
  10. curl_close ($ch);
  11.  
  12. $destination = "./files/fichero.pdf";
  13. $file = fopen($destination, "w+");
  14. fputs($file, $data);
  15. fclose($file);

Evidentemente, quedaría hacer el bucle y poner nombres distintos a cada fichero, pero eso ya es trivial.

Última edición por prueba230683; 16/05/2020 a las 15:33
  #6 (permalink)  
Antiguo 18/05/2020, 15:04
 
Fecha de Ingreso: octubre-2011
Mensajes: 205
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Formulario post - Conocer url para realizar envío masivo

Vaya, llevo todo el día con esto pero no veo la solución.

Si, hago lo siguiente:

print($data) me devuelve la pagina como si no hubiese enviado nada en el formulario, lo mismo que se muestra accediendo a la web:

http://www.zaragoza.es/consultaRecib...oAguaPdf.faces

Y si hago print_r($_POST) me devuelve un array vacío.

He probado a cambiar esta linea pero creo que nunca envío los parámetros: curl_setopt($ch, CURLOPT_POSTFIELDS)

Opción 1

Código PHP:
$post = [
    
'formConsultaReciboPdf:nFijo' => 'valor1',
    
'formConsultaReciboPdf:dni' => 'valor2',
    
'formConsultaReciboPdf:importe'   => 'valor3'
];

curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$post); 
Opción 2

Código PHP:

curl_setopt
($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS,"formConsultaReciboPdf:nFijo=valor1&formConsultaReciboPdf:dni=valor2&formConsultaReciboPdf:importe=valor3"); 
Veis algún error?
  #7 (permalink)  
Antiguo 18/05/2020, 15:31
 
Fecha de Ingreso: abril-2011
Mensajes: 125
Antigüedad: 9 años, 2 meses
Puntos: 44
Respuesta: Formulario post - Conocer url para realizar envío masivo

Cambia el CURLOPT_POSTFIELDS por:

Código URL:
Ver original
  1. formConsultaReciboPdf:nFijo=VALOR&formConsultaReciboPdf:numRecibo1=&formConsultaReciboPdf:numRecibo2=&formConsultaReciboPdf:numRecibo3=&formConsultaReciboPdf:dni=VALOR&formConsultaReciboPdf:importe=VALOR&formConsultaReciboPdf:consulta=Descargar+duplicado&formConsultaReciboPdf_SUBMIT=1

Reemplazando VALOR por valores válidos. Además deberás añadir una sesión mediante:

Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_COOKIE, "JSESSIONID=valor_de_la_cookie");

valor_de_la_cookie es el valor de la cookie JSESSIONID (lo puedes sacar mediante herramientas para desarrolladores de tu navegador). Suelen expirar en 15 min aprox.

Si esto no funciona, no parece viable y tendrás que hacerlo a mano (que es para lo que está pensada esa aplicación, si no, tendrían un API público).

Última edición por prueba230683; 18/05/2020 a las 16:05
  #8 (permalink)  
Antiguo 20/05/2020, 14:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 205
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Formulario post - Conocer url para realizar envío masivo

Y funciono, vaya crack. Era el tema de las cookies. Muchas gracias!!!



La zona horaria es GMT -6. Ahora son las 13:28.