Foros del Web » Programando para Internet » PHP »

Descargando un fichero con CURL lo guarda vacío

Estas en el tema de Descargando un fichero con CURL lo guarda vacío en el foro de PHP en Foros del Web. Pues eso, que bajo un fichero .zip y me lo guarda vacío. No se por qué es.... Código PHP: $cookie_file_path  =  "c:\cookie" ; $url  =  ...
  #1 (permalink)  
Antiguo 22/08/2009, 08:30
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Descargando un fichero con CURL lo guarda vacío

Pues eso, que bajo un fichero .zip y me lo guarda vacío. No se por qué es....

Código PHP:
$cookie_file_path "c:\cookie";
$url 'https://www.dominio.es/Files/00317948/00317948-00002_2009_08_18.zip';
$save_to='c:\\';
 
$g=$save_to.basename($url);

if(!
is_file($g)){

$ch=curl_init($url);
$fp=fopen ($g"w");

curl_setopt ($chCURLOPT_FILE$fp);
curl_setopt ($chCURLOPT_HEADER ,0);
curl_setopt($chCURLOPT_COOKIEFILE"$cookie_file_path");
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);

curl_exec ($ch);
curl_close ($ch);
fclose($fp);

Me falta o sobra algo?
  #2 (permalink)  
Antiguo 22/08/2009, 08:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Descargando un fichero con CURL lo guarda vacío

Probe el codigo y me funciono perfectamente. Salio el archivo con toda su informacion. Vas a tener que verificar si la pagina en donde estas tratando de sacar el .zip no te este enviando un zip vacio
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/08/2009, 08:49
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Descargando un fichero con CURL lo guarda vacío

Lo he probado con otra web sin seguridad y funciona ok. Eso significa que crea el fichero pero no carga en de la web.

Hay alguna manera de comprobar que se accede a él?

Seguiré investigando.
  #4 (permalink)  
Antiguo 22/08/2009, 08:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Descargando un fichero con CURL lo guarda vacío

Se supone que de la forma como hagas para un HTTP lo puedas hacer para un HTTPS
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 22/08/2009, 09:22
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Descargando un fichero con CURL lo guarda vacío

Cita:
Iniciado por cluster28 Ver Mensaje
Código PHP:
curl_setopt($chCURLOPT_COOKIEFILE"$cookie_file_path"); 
Esto estaba mal pero sigue igual. Si pongo que cargue la URL "https://www.dominio.es/clientes/Informes/Paginas/DetalleInformesCDR.aspx?billingAccountId=00317948-00002" lo muestra bien, pero si le digo que descargue el fichero parece que no lo encuentra. Pero si pegamos la URL del fichero en un navegador previamente logueado se puede descargar.....
  #6 (permalink)  
Antiguo 22/08/2009, 09:33
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Descargando un fichero con CURL lo guarda vacío

Ya está resuelto, faltaban estas dos líneas (que no me quedan muy claras para qué sirven pero bueno):

Código PHP:
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE); 
Para el que le interese de esta manera se puede acceder a un servidor seguro y descargar un fichero:

Código PHP:
$cookie_file_path "c:\cookiefile";//o lo que sea
$LOGINURL "https://www.dominio.es/loquesea";
$agent "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
$POSTFIELDS 'user=usuario&pass=password';//o lo que sea

$ch curl_init();
curl_setopt($chCURLOPT_URL,$LOGINURL);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_USERAGENT$agent);
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS,$POSTFIELDS);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_COOKIEFILE$cookie_file_path);
curl_setopt($chCURLOPT_COOKIEJAR$cookie_file_path);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
$result curl_exec ($ch);
curl_close ($ch);

unset(
$ch);

$url 'https://www.dominio.es/Files/ficheroquesea';
$save_to='c:\destino';
 
$g=$save_to.basename($url);
echo 
$g;
$ch=curl_init($url);
$fp=fopen ($g"w");
curl_setopt ($chCURLOPT_FILE$fp);
curl_setopt ($chCURLOPT_HEADER ,0);
curl_setopt($chCURLOPT_USERAGENT$agent);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($chCURLOPT_COOKIEFILE$cookie_file_path);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
curl_exec ($ch);
curl_close ($ch);
fclose($fp); 
  #7 (permalink)  
Antiguo 22/08/2009, 09:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Descargando un fichero con CURL lo guarda vacío

Ahi esta lo indicaste previamente logueado. Mira te sugiero leer primero sobre este tema y trata de crearlo. Tienes que indicarle los parametros del logueo o sea el cookie y luego decirle a curl que te redireccione si es que alguna pagina te redirecciona.

http://www.forosdelweb.com/f18/aport...equest-724214/

Edito:
Escribiste que lo resolviste mientras escribia el mensaje
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 22/08/2009 a las 09:37 Razón: Añadir edicion
  #8 (permalink)  
Antiguo 22/08/2009, 09:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Descargando un fichero con CURL lo guarda vacío

Estaba buscando información en internet sobre esas dos variables y mira lo que encontre. Esta en ingles pero te da la información que estas buscando sobre que hacen esas dos

http://www.sitepoint.com/forums/show...70&postcount=7
Cita:
Normally, when you connect with a secure server to browse a secured site, the server presents you with a certificate, signed by a CA, that says I am https://www.paypal.com. Now with CURLOPT_SSL_VERIFYHOST enabled, libcurl verifies whether the certificate that server presented does actually indicate that it belongs to https://www.paypal.com. If certificate doesn’t certify that the server’s identity to be https://www.paypal.com, the connection fails.

So far so good, but what if certificate itself is fake? CURLOPT_SSL_VERIFYPEER comes in handy. It verifies the authenticity of the certificate itself, against a set of CA certificates that libcurl holds. Some CA certificates come by default bundled with libcurl and some do not. When CURLOPT_SSL_VERIFYPEER is enabled and the server presents the libcurl with a certificate that it doesn’t recognize, connection fails.

Now how do u get around this. Either stop being paranoid and be content just with CURLOPT_SSL_VERIFYHOST . Else install additional certificates in your system and specify those certificates in a curl session with CURLOPT_CAINFO or CURLOPT_CAPATH.

In a nutshell, CURLOPT_SSL_VERIFYPEER authenticates the certificates and CURLOPT_SSL_VERIFYHOST authenticates the host. May be this helps.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 15/03/2011 a las 11:48
  #9 (permalink)  
Antiguo 31/05/2010, 06:21
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Descargando un fichero con CURL lo guarda vacío

Gracias,

Era por culpa de la ruta, que no era absoluta. Sin embargo, algo me falla porque me dice que la sesión a caducado... es como si no conservase los datos cuando intento enviarselos al formulario.

Código PHP:
Ver original
  1. <?php
  2.    
  3. $target_url = "https://www.bookingh10hotels.com";
  4. $target_form = "https://www.bookingh10hotels.com/reservasweb/cargar_grupo_codPromo_post.asp";
  5.  
  6.  
  7. $ch = curl_init();
  8. // Indico la URL a la que quiero enviar los datos
  9. curl_setopt($ch, CURLOPT_URL, $target_form);
  10. // Si la conexión tarda más de 30 segundos, que no siga
  11. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  12. // Guardo las cookies en este fichero
  13. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'C:\AppServ\www\correo_imap\CURL\cookie.txt');
  14. curl_setopt($ch, CURLOPT_FAILONERROR, true);
  15. // Permitir que la conexión se redirija si le es indicado
  16. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  17. // Foy a finjir que provengo de otra web, la que yo quiera
  18. curl_setopt($ch, CURLOPT_REFERER, 'https://www.bookingh10hotels.com');
  19. // Voy a enviar contenido en forma de variables POST
  20. curl_setopt($ch, CURLOPT_POST, 1);
  21. // Estos son los campos POST, en forma de array asociativo
  22. curl_setopt($ch, CURLOPT_POSTFIELDS, array('CodPromocion'=>"CWTPROMO"));
  23. // El resultado lo quiero almacenar en una variable, en lugar de que lo imprima por pantalla
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  25. curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  26. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  27. $html = curl_exec($ch);
  28.  
  29. echo "<pre>";
  30. echo $html;
  31. echo "</pre>";
  32. ?>


¿Puede ser por las cookies?

Gracias de antemano!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:25.