Foros del Web » Programando para Internet » PHP »

CURL problema al obtener el header en caso de 302

Estas en el tema de CURL problema al obtener el header en caso de 302 en el foro de PHP en Foros del Web. loading............. Buenas colegas. Intento obtener los headers de alguna imagen que el usuario va a subir con este simple código: Código PHP: $ch  =  curl_init  ...
  #1 (permalink)  
Antiguo 01/02/2010, 02:06
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
CURL problema al obtener el header en caso de 302

loading.............


Buenas colegas.

Intento obtener los headers de alguna imagen que el usuario va a subir con este simple código:

Código PHP:
$ch curl_init ();
curl_setopt $chCURLOPT_URL"http://imgnook.com/fixed/437825/vegan-red-velvet-2-by-bittykate.jpg" );
curl_setopt $chCURLOPT_SSL_VERIFYPEERFALSE );
curl_setopt $chCURLOPT_SSL_VERIFYHOST);
curl_setopt $chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );
curl_setopt $chCURLOPT_FOLLOWLOCATIONtrue );
curl_setopt $chCURLOPT_RETURNTRANSFERtrue );
curl_setopt $chCURLOPT_HEADERtrue );
curl_setopt $chCURLOPT_NOBODYtrue );
$data curl_exec $ch );
print_r($data);

print_r(curl_getinfo($ch)); 
resultado:
Código:
HTTP/1.1 200 OK
Date: Mon, 01 Feb 2010 08:04:21 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
X-Powered-By: PHP/5.2.9
Cache-Control: private, max-age=10800, pre-check=10800
Pragma: private
Expires: Sat, 24 Apr 10 02:04:21 -0500
Accept-Ranges: bytes
Set-Cookie: PHPSESSID=a7363187375d07980483f8b08b5736ea; path=/
Set-Cookie: sess=ba2fd310dcaa8781a9a652a31baf3c68; expires=Mon, 01-Feb-2010 09:04:21 GMT; path=/; domain=.imgnook.com
Set-Cookie: sess=ba2fd310dcaa8781a9a652a31baf3c68; expires=Mon, 01-Feb-2010 09:04:21 GMT; path=/; domain=.imgnook.com
Content-Range: bytes 0-103849/103850
Content-Length: 103850
Content-Type: image/jpeg

Array
(
    [url] => http://imgnook.com/fixed/437825/vegan-red-velvet-2-by-bittykate.jpg
    [content_type] => image/jpeg
    [http_code] => 200
    [header_size] => 741
    [request_size] => 163
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.5
    [namelookup_time] => 0
    [connect_time] => 0.218
    [pretransfer_time] => 0.218
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => 103850
    [upload_content_length] => -1
    [starttransfer_time] => 0.5
    [redirect_time] => 0
)
Con esto tengo los headers de la imagen y validar el tamaño del mismo para permitir a un usuario subirlo o no.

Ahora para que me encontrado con este tipo de imágenes:

Imagen_virtual.

http://twitpic.com/show/large/10lugr.jpg

La URL hace redirección 302 al verdadero archivo:

Imagen_real.

http://web2.twitpic.com/img/61485435...2a1-scaled.jpg

Por lo tanto mi codigo solo me devuelve el tamaño de la imagen virtual ( CERO o algunos bytes ) y si le pongo true a CURLOPT_FOLLOWLOCATION:

Código PHP:
curl_setopt $chCURLOPT_FOLLOWLOCATIONtrue ); 
Me sigue devolviendo el header de la imagen virtual.

No puedo seguir el Location: de la imagen virtual hacia la original ya que la original solo se muestra si se encuentra a imagen virtual como referer.

como pueden ver aca
Código PHP:
$ch curl_init ();
curl_setopt $chCURLOPT_URL"http://web2.twitpic.com/img/61485435-c90f66b1200b346622830b281d8bc6de.4b6662a1-scaled.jpg" );
curl_setopt $chCURLOPT_SSL_VERIFYPEERFALSE );
curl_setopt $chCURLOPT_SSL_VERIFYHOST);
curl_setopt $chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );
curl_setopt $chCURLOPT_FOLLOWLOCATIONtrue );
curl_setopt $chCURLOPT_RETURNTRANSFERtrue );
curl_setopt $chCURLOPT_HEADERtrue );
curl_setopt $chCURLOPT_NOBODYtrue );
$data curl_exec $ch );
print_r($data);

print_r(curl_getinfo($ch)); 
resultado
Código:
HTTP/1.1 200 OK
Date: Mon, 01 Feb 2010 07:58:27 GMT
Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.8e DAV/2 PHP/5.2.9 with Suhosin-Patch
X-Powered-By: PHP/5.2.9
Content-Type: text/html

Array
(
    [url] => http://web2.twitpic.com/img/61485435-c90f66b1200b346622830b281d8bc6de.4b6662a1-scaled.jpg
    [content_type] => text/html
    [http_code] => 200
    [header_size] => 204
    [request_size] => 185
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.485
    [namelookup_time] => 0
    [connect_time] => 0.235
    [pretransfer_time] => 0.235
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0.485
    [redirect_time] => 0
)
Pero lo he intentado de todos modos.

Código PHP:
$ch curl_init ();
curl_setopt $chCURLOPT_URL"http://web2.twitpic.com/img/61485435-c90f66b1200b346622830b281d8bc6de.4b6662a1-scaled.jpg" );
curl_setopt $chCURLOPT_SSL_VERIFYPEERFALSE );
curl_setopt $chCURLOPT_SSL_VERIFYHOST);
curl_setopt $chCURLOPT_REFERER"http://twitpic.com/show/large/10lugr.jpg" );
curl_setopt $chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );
curl_setopt $chCURLOPT_FOLLOWLOCATIONtrue );
curl_setopt $chCURLOPT_RETURNTRANSFERtrue );
curl_setopt $chCURLOPT_HEADERtrue );
curl_setopt $chCURLOPT_NOBODYtrue );
$data curl_exec $ch );
print_r($data);

print_r(curl_getinfo($ch)); 
con el resultado

Código:
HTTP/1.1 200 OK
Date: Mon, 01 Feb 2010 07:56:05 GMT
Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.8e DAV/2 PHP/5.2.9 with Suhosin-Patch
X-Powered-By: PHP/5.2.9
Content-Type: image/jpeg

Array
(
    [url] => http://web2.twitpic.com/img/61485435-c90f66b1200b346622830b281d8bc6de.4b6662a1-scaled.jpg
    [content_type] => image/jpeg
    [http_code] => 200
    [header_size] => 205
    [request_size] => 236
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.578
    [namelookup_time] => 0
    [connect_time] => 0.344
    [pretransfer_time] => 0.344
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0.578
    [redirect_time] => 0
)
No puedo cambiar

Código PHP:
curl_setopt $chCURLOPT_NOBODYtrue ); 
a false o quitarlo, ya que estaría descargando toda la imagen solo para saber su tamaño (ni pensarlo).

Bueno.... ese es mi problema, espero alguien haya pasado por eso y solucionado hehehe.

Saludos!!


connection closed.
__________________

Maborak Technologies
  #2 (permalink)  
Antiguo 01/02/2010, 02:19
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: CURL problema al obtener el header en caso de 302

No seria mas facil usar la funcion getimagesize ;)..
Suerte
Salu2
__________________
Half Music - www.halfmusic.com
  #3 (permalink)  
Antiguo 01/02/2010, 07:21
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Respuesta: CURL problema al obtener el header en caso de 302

loading............


hola, pues no. getimagesize descarga el fichero para sacar los datos.


connection closed.
__________________

Maborak Technologies

Etiquetas: curl, header
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 19:29.