2010-08-28 32 views
14

¿Cómo puedo obtener el código fuente html de http://www.example-webpage.com/file.html sin usar file_get_contents()?php: Obtener código fuente html con cURL

Necesito saber esto porque en algunos webhosts allow_url_fopen está deshabilitado, por lo que no puede usar file_get_contents(). ¿Es posible obtener la fuente del archivo html con cURL (si la compatibilidad con cURL está habilitada)? ¿Si es así, cómo? Gracias.

Respuesta

25

intente lo siguiente:

$ch = curl_init("http://www.example-webpage.com/file.html"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
$content = curl_exec($ch); 
curl_close($ch); 

sólo recomendaría esto para archivos pequeños. Los archivos grandes se leen como un todo y es probable que produzcan un error de memoria. editar: después de discutir en los comentarios descubrimos que el problema era que el servidor no resolvía el nombre de host y la página era además un recurso https así que aquí viene su solución temporal (hasta que su serveradmin arregle el nombre resolviendo) .

lo que hice es simplemente hacer ping en graph.facebook.com para ver la dirección IP, reemplazar el nombre de host por la dirección IP y en su lugar darle el encabezado manualmente. Sin embargo, esto hace que el certificado SSL válido por lo que tenemos para suprimir la verificación de pares

//$url = "https://graph.facebook.com/19165649929?fields=name"; 
$url = "https://66.220.146.224/19165649929?fields=name"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: graph.facebook.com')); 
$output = curl_exec($ch); 
curl_close($ch); 

tener en cuenta que la dirección IP puede cambiar y esto es una fuente EROR. también deberías hacer un manejo de errores usando curl_error();

+0

gracias pero obtengo un archivo en blanco. Estoy tratando de encontrar el error –

+0

John, si esto no funciona, verifique su URL. Además, no te olvides de curl_close ($ ch) al final. – Brad

+0

¿Funciona con un archivo de texto plano en lugar de un archivo html? Lo probé con un archivo de texto plano y recibí una página en blanco. –

3

Trate http://php.net/manual/en/curl.examples-basic.php :)

<?php 

$ch = curl_init("http://www.example.com/"); 
$fp = fopen("example_homepage.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

$output = curl_exec($ch); 
curl_close($ch); 
fclose($fp); 
?> 

A medida que la documentación dice:

La idea básica detrás de las funciones CURL es que inicializar una sesión CURL usando el curl_init(), entonces puede establecer todas sus opciones para la transferencia a través de curl_setopt(), luego puede ejecutar la sesión con curl_exec() y luego finalizar su sesión usando curl_close().