Foros del Web » Programando para Internet » PHP »

[APORTE] file_get_contents(), cURL, HTTP_Request

Estas en el tema de [APORTE] file_get_contents(), cURL, HTTP_Request en el foro de PHP en Foros del Web. He visto varios post, indicando de que forma se puede conectar a una pagina externa usando PHP o mostrar una pagina externa a través de ...

  #1 (permalink)  
Antiguo 03/08/2009, 11:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
[APORTE] file_get_contents(), cURL, HTTP_Request

He visto varios post, indicando de que forma se puede conectar a una pagina externa usando PHP o mostrar una pagina externa a través de PHP, etc. Aqui hay una pequeña información de como lograrlo con diferentes métodos. Si alguien desea añadir al tema, mostrando otro método es bienvenido. En diferentes post estare añadiendo información. Lo estoy haciendo porque me vi en la necesidad de estudiar sobre el tema para unas aplicaciones en el trabajo y creo que será útil para muchos que deseamos aprender sobre el tema.

Hay varias maneras de mostrar un URL remoto en PHP. La elección de un método sobre otro depende de las necesidades de su simplicidad, control y portabilidad. Los tres métodos descritos en este post son los estandares file function, la extensión cURL, y la clase de PEAR HTTP_Request. Estos tres métodos pueden generalmente hacer todo lo que necesita y por lo menos uno de ellos deben estar disponibles, sea cual sea su configuración del servidor o capacidad de instalar las extensiones personalizadas. Otras formas de recuperar las URL remotas incluye la extesión pecl_http (http://pecl.php.net/package/pecl_http), que, aunque todavía en desarrollo, ofrece algunas características prometedoras, y utilizando el fsockopen() para abrir un zócalo sobre el que envía una petición HTTP que lo construye pieza por pieza.

El uso del estandar "file function" como la función file_get_contents() es simple y conveniente. Sigue automaticamente las redirecciones, así que si utiliza esta función para recuperar el directorio http://www.example.com/persona/ y el servidor le redirecciona a http://www.example.com/people/, obtendrá el contenido de la página de índice de directorio, no un mensaje que le dice que la URL ha cambiado de dirección. También las funciones de archivo estándar de trabajo tanto con HTTP y FTP. El inconveniente de este método es que requiere la directiva de configuración allow_url_fopen a estar activado.

La extensión CURL es una poderosa herramienta. Se basa en el popular libcurl (http://curl.haxx.se/) para proporcionar un rápido, configurable mecanismo para el manejo de una amplia variedad de peticiones de red. Si esta extensión está disponible en su servidor, le recomendamos que utilice.

Si se desactiva allow_url_fopen y cURL no está disponible, el módulo PEAR HTTP_Request salva el día. Al igual que todos los módulos de PEAR, es puro PHP, por lo que si puede guardar un archivo PHP en su servidor, puede utilizarlo. HTTP_Request soporta casi cualquier cosa que te gustaría hacer cuando se solicite una URL remota, incluyendo la modificación de cabeceras de petición y el cuerpo, utilizando un método arbitrario, respuesta y recuperación de los encabezados. Para mas informacion sobre como instalar los modulo de PEAR puedes ir a http://pear.php.net/manual/en/installation.getting.php

Para recibir información de URL seguras, solo escribe https en vez de http. Siempre y cuando en PHP haya sido construido en una libreria SSL tal como OpenSSL, todas las funciones que pueden recibir información de URL regulares pueden recibir información de URL seguras. Verifica la sección de "openssl" en la salida de phpinfo() para ver si tu configuración de php tiene soporte de SSL.

Aquí hay varios ejemplos de lo que se puede hacer con los 3 métodos.

Para trabajar con cURL existe una librería que facilita la forma de trabajar con cURL https://github.com/rmccue/Requests

Obteniendo una URL con file_get_contents()
Código PHP:
Ver original
  1. <?php
  2. $page = file_get_contents('http://www.example.com/algo.txt');
  3. echo $page;
  4. ?>

Obteniendo una URL con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/algo.txt');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. $page = curl_exec($c);
  5. echo $page;
  6. ?>

Obteniendo una URL con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $r = new HTTP_Request('http://www.example.com/algo.txt');
  4. $r->sendRequest();
  5. $page = $r->getResponseBody();
  6. echo $page;
  7. ?>




Mostrar una pagina protegida con file_get_contents()
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://FDW:[email protected]/proyecto.php';
  3. $page = file_get_contents($url);
  4. echo $page;
  5. ?>

Mostrar una pagina protegida con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/proyecto.php');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_USERPWD, 'FDW:PASS');
  5. $page = curl_exec($c);
  6. echo $page;
  7. ?>

Mostrar una pagina protegida con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require 'HTTP/Request.php';
  3. $r = new HTTP_Request('http://www.example.com/proyecto.php');
  4. $r->setBasicAuth('FDW','PASS');
  5. $r->sendRequest();
  6. $page = $r->getResponseBody();
  7. echo $page;
  8. ?>




Enviar por el método de POST requiere de manejo especial en cada argumento. Con el método de GET, estos argumentos están en la cadena de consulta, pero en un POST van en la solicitud cuerpo. Además, la solicitud necesita una cabecera Content-Length que le dice al servidor el tamaño del contenido a esperar en la solicitud cuerpo.

Mostrar una dirección URL con el método de POST en vez del metdo de GET es bien útil cuando la cadena es muy larga, más de 200 caracteres aproximadamente. La especificación de HTTP 1.1 en el RFC 2616 no impone una longitud máxima en las URL, por lo que el comportamiento varía entre las diferentes web y servidores proxy. Si al mostrar las URL con GET y recibes resultados inesperados o resultados con el código de estado 414 ( "Request-URI Too Long"), convierte la solicitud al metodo de POST.

Usar el metodo de POST con file_get_contents()
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/submit.php';
  3. $body = 'FDW=programacion&PHP=f18';
  4. $options = array('method' => 'POST', 'content' => $body);
  5. $context = stream_context_create(array('http' => $options));
  6. $page = file_get_contents($url, false, $context);
  7. echo $page;
  8. ?>

Usar el metodo de POST con cURL
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/submit.php';
  3. $body = 'FDW=programacion&PHP=f18';
  4. $c = curl_init($url);
  5. curl_setopt($c, CURLOPT_POST, true);
  6. curl_setopt($c, CURLOPT_POSTFIELDS, $body);
  7. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  8. $page = curl_exec($c);
  9. echo $page;
  10. ?>

Usar el metodo de POST con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require 'HTTP/Request.php';
  3. $url = 'http://www.example.com/submit.php';
  4. $r = new HTTP_Request($url);
  5. $r->setMethod(HTTP_REQUEST_METHOD_POST);
  6. $r->addPostData('FDW','programacion');
  7. $r->addPostData('PHP','f18');
  8. $r->sendRequest();
  9. $page = $r->getResponseBody();
  10. echo $page;
  11. ?>




Las cookies se envían al servidor en el encabezado de solicitud de cookies. La extensión cURL tiene una opción específica en cookies, pero con HTTP_Request, tienes que agregar el encabezado de cookies al igual que con otras cabeceras de petición. Los valores de Cookie múltiples se envían en una lista delimitada por coma. En los ejemplos vamos a enviar dos cookies: una con el nombre de user y con el valor FDW y otra con el nombre de actividad y con el valor de programacion.

Enviar cookies con file_get_contents()
Código PHP:
Ver original
  1. $options = array('http' =>
  2.     array(
  3.         'method'  => 'GET',
  4.         'header'  => 'Content-type: text/plain;charset=UTF-8' . PHP_EOL .
  5.         'Referer: http://www.forosdelweb.com' . PHP_EOL .
  6.         'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6' . PHP_EOL .
  7.         'Cookie: user=FDW; actividad=programacion;' . PHP_EOL
  8.     )
  9. );
  10. $context = stream_context_create($options);
  11. $page = file_get_contents('http://www.example.com/needs-cookies.php', false, $context);
  12. echo $page;

Enviar cookies con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/needs-cookies.php');
  3. curl_setopt($c, CURLOPT_COOKIE, 'user=FDW; actividad=programacion');
  4. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  5. $page = curl_exec($c);
  6. echo $page;
  7. ?>

Enviar cookies con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require 'HTTP/Request.php';
  3. $r = new HTTP_Request('http://www.example.com/needs-cookies.php');
  4. $r->addHeader('Cookie','user=FDW; actividad=programacion');
  5. $r->sendRequest();
  6. $page = $r->getResponseBody();
  7. echo $page;
  8. ?>

Última edición por abimaelrc; 11/03/2013 a las 06:47
  #2 (permalink)  
Antiguo 03/08/2009, 12:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Continuación de los ejemplos...

Seguir redireccionamientos con file_get_contents()
Nota: El file_get_contents() sigue automáticamente las redirecciones (header("Location: redireccion.php")).
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/redirector.php';
  3. echo file_get_contents($url);
  4. ?>

Seguir redireccionamientos con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/redirector.php');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
  5. $page = curl_exec($c);
  6. echo $page;
  7. ?>

Seguir redireccionamientos con HTTP_Client
Nota: HTTP_request no sigue las redirecciones, pero el módulo de PEAR HTTP_Client logra lo que queremos
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Client.php';
  3. $client = new HTTP_Client();
  4. $client->get($url);
  5. $response = $client->currentResponse();
  6. echo $response['body'];
  7. ?>
Puede que si el servidor está en safe_mode te dé un error, para más información de como solventar este problema leer el siguiente aporte http://www.forosdelweb.com/f18/aport...bit-ly-808160/ (por Triby).



Como hemos indicado anteriormente el file_get_contents() sigue automáticamente las redirecciones (header("Location: redireccion.php")). A partir de PHP 5.0.0, file_get_contents() y fopen() nos da unas opciones especificas acerca de como obtener el stream. En PHP 5.1.0 y posteriores, una de esas opciones es max_redirects el número máximo de redirecciones a seguir. Si indicamos el max_redirects a 0 o 1, solo hace una solicitud.

El max_redirects realmente no indica el número de redirecciones deben seguirse, pero el número máximo de solicitudes que deben efectuarse en el momento siguiente a la cadena de redireccionamiento. Es decir, un valor de 1 le dice a PHP que al menos una solicitud debe seguir, y no un redireccionamiento. Un valor de 2 le dice a PHP para que al menos de 2 solicitudes deben seguir y no más de 1 redireccionamiento. (Un valor de 0, sin embargo, se comporta como un valor de 1, PHP hace sólo 1 solicitud.)

No seguir redirecciones con file_get_contents()
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/redirector.php';
  3. $options = array('max_redirects' => 1 );
  4. $context = stream_context_create(array('http' => $options));
  5. echo file_get_contents($url, false, $context);
  6. ?>

No seguir redirecciones con cURL
Nota: Para no seguir las redirecciones no uses CURLOPT_FOLLOWLOCATION
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/redirector.php');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. $page = curl_exec($c);
  5. ?>

No seguir redirecciones con HTTP_Request
Nota: HTTP_Request no sigue redirecciones
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $r = new HTTP_Request('http://www.example.com/redirector.php');
  4. $r->sendRequest();
  5. echo $r->getResponseBody();
  6. ?>

Limitar a 2 redirecciones con file_get_contents
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/redirector.php';
  3. $options = array('max_redirects' => 3 );
  4. $context = stream_context_create(array('http' => $options));
  5. echo file_get_contents($url, false, $context);

Limitar a 2 redirecciones con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://www.example.com/redirector.php');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
  5. curl_setopt($c, CURLOPT_MAXREDIRS, 2);
  6. $page = curl_exec($c);

Última edición por abimaelrc; 05/09/2012 a las 14:43
  #3 (permalink)  
Antiguo 03/08/2009, 13:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Continuación de los ejemplos...

Si quieres obtener una URL remota, pero no quieres esperar demasiado tiempo si el servidor remoto está ocupado o lento.

Configurar tiempo limite con file_get_contents()
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. ini_set('default_socket_timeout', 15);
  3. $page = file_get_contents('http://slow.example.com/');
  4. echo $page;
  5.  
  6. // o se puede limitar también
  7. $context = stream_context_create(array('http' => array('timeout' => 10)));
  8. $page = file_get_contents('http://slow.example.com/', 0, $context);
  9. // Ejemplo de uso lo podemos ver en
  10. // http://www.forosdelweb.com/f18/file_get_contents-falla-947572/

Configurar tiempo limite con cURL
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://slow.example.com/');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15);
  5. $page = curl_exec($c);
  6. echo $page;
  7. ?>

Configurar tiempo limite con HTTP_Request
Nota: Estableceremos el tiempo limite a 15 segundos
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $opts = array('timeout' => 15);
  4. $req = new HTTP_Request('http://slow.example.com/', $opts);
  5. $req->sendRequest();
  6. ?>




Si dependes de un servicio remoto, puede estar funcionando y en marcha, pero no estara en condiciones de manejar sus pedidos debido a problemas de red entre tu servidor y el servidor remoto. Limitar la cantidad de tiempo que espera de PHP para conectar a un servidor remoto es una buena idea, si se utilizan datos procedentes de fuentes remotas que sea parte del proceso de construcción de la página.

Todas las técnicas que describiremos limita la cantidad de tiempo de espera de PHP para conectar a un servidor remoto. Si estas realmente preocupado por las respuestas rápidas, adicionalmente configura el límite de cuánto tiempo PHP espera recibir los datos de los zócalos conectados. Para una conexión stream, utilice la función de stream_set_timeout(). Para esta función necesitas abrir un stream con fopen() y no con file_get_contents(). En los ejemplo limitaremos el tiempo de leer a 20 segundos.

Aunque el establecimiento de conexión y los tiempos de lectura puede mejorar el rendimiento, también puede dar lugar a respuestas ilegibles. La secuencia de comandos puede leer sólo una respuesta parcial ante un tiempo de expiración. Si ha establecido los tiempos, asegúrese de validar toda la respuesta que ha recibido. Por otra parte, en situaciones en las que la generación de la página rápido es fundamental, puedes recuperar los datos externos en un proceso separado y escribir a una memoria caché local. De esta forma, sus páginas pueden usar el caché, sin temor a límites de tiempo o respuestas parciales.

Configurar el tiempo de leer con fopen()
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://slow.example.com';
  3. $stream = fopen($url, 'r');
  4. stream_set_timeout($stream, 20);
  5. $response_body = stream_get_contents($stream);
  6. echo $response_body;
  7. ?>

Configurar el tiempo de leer con cURL
Código PHP:
Ver original
  1. <?php
  2. $c = curl_init('http://slow.example.com/');
  3. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15);
  5. curl_setopt($c, CURLOPT_TIMEOUT, 20);
  6. $page = curl_exec($c);
  7. echo $page;
  8. ?>

Configurar el tiempo de leer con HTTP_Request
Código PHP:
Ver original
  1. <?php
  2. require_once 'HTTP/Request.php';
  3. $opts = array('readTimeout' => array(20,0));
  4. $req = new HTTP_Request('http://slow.example.com/', $opts);
  5. $req->sendRequest();
  6. ?>

Última edición por abimaelrc; 30/09/2011 a las 00:54
  #4 (permalink)  
Antiguo 03/08/2009, 14:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Cotinuación de los ejemplos...

Enviar archivos con cURL
Código PHP:
Ver original
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://example.com/send_file.php");
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($ch, CURLOPT_POST, true);
  6. // lo mismo que <input type="file" name="nombre_del_input" />
  7. $post = array(
  8.     "nombre_del_input"=>"@C:/directorio/en/servidor/hacia/el/archivo.jpg",
  9. );
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  11. $page = curl_exec($ch);
  12. echo $page;


Aquí hay más información de como conectarse a un servidor que requiere autentificarse con cookies
Ejemplo usando cURL y URL seguras
Código PHP:
Ver original
  1. <?php
  2. $cookie_file_path = "c:/cookiefile";//o lo que sea
  3. $LOGINURL = "https://www.example.com/loquesea";
  4. $agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
  5. $POSTFIELDS = 'user=usuario&pass=password';//o lo que sea
  6.  
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL,$LOGINURL);
  9. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  10. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  11. curl_setopt($ch, CURLOPT_POST, 1);
  12. curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS);
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  15. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
  16. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  18. $page = curl_exec ($ch);
  19. curl_close ($ch);
  20. echo $page;
Este ejemplo fue tomado de este tema

Otro ejemplo conectandose al servidor con cookies o sesiones
Código PHP:
Ver original
  1. $cookeFile = 'cookie.txt';
  2. file_put_contents($cookeFile, '');
  3. $url    = "http://example.com/a.php";
  4. $url2   = "http://example.com/b.php";
  5. $fields = array("usr" => 'usr', "pwd" => 'pwd');
  6.  
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL, $url);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  10. curl_setopt($ch, CURLOPT_POST, 1);
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookeFile);
  12. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookeFile);
  13. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
  14.  
  15. $page = curl_exec($ch);
  16.  
  17. curl_setopt($ch, CURLOPT_URL, $url2);
  18. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookeFile);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  20.  
  21. $page = curl_exec($ch);
  22.  
  23. echo $page;
Ejemplo tomado de este tema

Última edición por abimaelrc; 16/01/2013 a las 11:36
  #5 (permalink)  
Antiguo 04/08/2009, 05:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Para mostrar una página que incluye variables de cadena en la consulta, puedes hacer uso de http_build_query() para crear la cadena de consulta. Se acepta una serie de clave/valor en pares y devuelve una única cadena con todo escapado correctamente. Usted es responsable del simbolo de ? en el URL que establecen la consulta. Ejemplo con file_get_contents()
Código PHP:
Ver original
  1. <?php
  2. $vars = array('FDW' => 4, 'Programación' => 'PHP & f18');
  3. $qs = http_build_query($vars);
  4. $url = 'http://www.example.com/search.php?' . $qs;
  5. $page = file_get_contents($url);
  6. ?>

Ya hemos visto como obtener información de otros servidores. Si deseas manejar la informacion en vez de imprimirlo directamente en la pagina lo pasas a una variable y luego lo puedes manejar. Ejemplo de un codigo que desea mostrar en la pagina el resultado de las palabras que buscas pero que estén destacadas ("highlighted").

Código PHP:
Ver original
  1. $body = '<p>Me gusta mucho la programación de PHP.</p>
  2.  
  3. Deseas saber sobre programación de <a href="http://www.forosdelweb.com/f18">PHP</a>.
  4.  
  5. Yo deseo aprender sobre file_get_contents(), cURL y HTTP_Request.
  6.  
  7. <cURL>¡cURL no es una etiqueta de HTML!</cURL>';
  8.  
  9. $words = array('PHP','cURL');
  10. $replacements = array();
  11. foreach ($words as $i => $word) {
  12.     $replacements[] = "<span style='color: #ff0000;'>$word</span>";
  13. }
  14.  
  15. $parts = preg_split("{(<(?:\"[^\"]*\"|'[^']*'|[^'\">])*>)}",
  16.                     $body,
  17.                     -1,
  18.                     PREG_SPLIT_DELIM_CAPTURE);
  19. foreach ($parts as $i => $part) {
  20.     if (isset($part[0]) && ($part[0] == '<')) { continue; }
  21.     $parts[$i] = str_replace($words, $replacements, $part);
  22. }
  23.  
  24. $body = implode('',$parts);
  25.  
  26. print $body;
  27. ?>

$body representa el resultado que hayamos obtenido usando uno de los métodos que hemos usado. El resultado imprimira:

Código html:
Ver original
  1. <p>Me gusta mucho la programación de <span style='color: #ff0000;'>PHP</span>.</p>
  2.  
  3. Deseas saber sobre programación de <a href="http://www.forosdelweb.com/f18"><span style='color: #ff0000;'>PHP</span></a>.
  4.  
  5. Yo deseo aprender sobre file_get_contents(), <span style='color: #ff0000;'>cURL</span> y HTTP_Request.
  6.  
  7. <cURL>¡<span style='color: #ff0000;'>cURL</span> no es una etiqueta de HTML!</cURL>

Bueno esta abierto para los demas post

Creo que este último post debería ser otro aporte
__________________
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; 31/05/2010 a las 04:26
  #6 (permalink)  
Antiguo 04/08/2009, 11:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Para poder manipular los links de lo que hayamos obtenido usando cualquiera de los metodos mencionados podemos usar este codigo. En este caso usaré file_get_contents()

Código PHP:
Ver original
  1. <?php
  2. $html = file_get_contents('http://www.example.com/');
  3. function extract_links($html) {
  4.     $links = array();
  5.     preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i', $html,$matches,PREG_SET_ORDER);
  6.     foreach($matches as $match) {
  7.         $links[] = array($match[1],$match[2]);
  8.     }
  9.     return $links;
  10. }
  11. $links = extract_links($html);
  12. foreach ($links as $link) {
  13.     echo $link[0] . PHP_EOL;
  14. }
  15. ?>

Para bajar un archivo usando cURL se puede lograr de esta forma

Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.example.com/hola.zip';
  3.  
  4. $g=basename($url);
  5.  
  6. $fp=fopen($g, "w");
  7.  
  8. $ch = curl_init($url);
  9. curl_setopt($ch, CURLOPT_FILE, $fp);
  10. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
  11. curl_exec($ch);
  12.  
  13. fclose($fp);

Para bajar un archivo usando file_get_contents se puede lograr de esta forma
Código PHP:
Ver original
  1. <?php
  2. $url = "http://www.example.com/zip.zip";
  3. $g=basename($url);
  4. $content = file_get_contents($url);
  5. file_put_contents($g,$content);

Para leer un sitio web que verifica si es un navegador o no el que trata de ver la página web y solo despliega la información si es un navegador el que visita el sitio, puedes tratar el siguiente código

file_get_contents
Código PHP:
Ver original
  1. <?php
  2. $options = array('http' =>
  3.     array( 'header' => 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6' . PHP_EOL )
  4. );
  5. $context = stream_context_create($options);
  6. $page = file_get_contents('http://www.example.com', false, $context);
  7. echo $page;

cURL
Código PHP:
Ver original
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6');
  4. curl_setopt($ch, CURLOPT_URL, 'http://example.com');
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. $page = curl_exec($ch);
  7. echo $page;
Un ejemplo lo pueden ver en este tema http://www.forosdelweb.com/f18/enigm...-error-833165/

Enviar petición, con la mayoría de las cabeceras que envían los navegadores

file_get_contents
Código PHP:
Ver original
  1. <?php
  2. $options = array('http' =>
  3.     array(
  4.         'header' => array(
  5.             'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6',
  6.             'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
  7.             'Cache-Control: max-age=0',
  8.             'Connection: keep-alive',
  9.             'Keep-Alive: 300',
  10.             'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
  11.             'Accept-Language: en-us,en;q=0.5',
  12.             'Pragma: ',
  13.         )
  14.     )
  15. );
  16. $context = stream_context_create($options);
  17. $page = file_get_contents('http://www.example.com', false, $context);
  18. echo $page;

cURL
Código PHP:
Ver original
  1. <?php
  2. $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";  
  3. $header[] = "Cache-Control: max-age=0";
  4. $header[] = "Connection: keep-alive";
  5. $header[] = "Keep-Alive: 300";
  6. $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  7. $header[] = "Accept-Language: en-us,en;q=0.5";
  8. $header[] = "Pragma: "; // browsers keep this blank.
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL,'http://www.example.com');
  11. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  12. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)');
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  14. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  15. $page = curl_exec ($ch);
  16. curl_close ($ch);
  17. echo $page;

Para autenticar, por ejemplo htpasswd se puede lograr de esta forma
Código PHP:
Ver original
  1. <?php
  2. $url = "http://example.com/authenticate.php";
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  5. curl_setopt($curl, CURLOPT_USERPWD, "user:pass");
  6. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  7. curl_setopt($curl, CURLOPT_URL, $url);
  8. $data = curl_exec($curl);
  9. curl_close($curl);
  10. echo $data;
Este fue tomado del siguiente tema http://www.forosdelweb.com/f18/obten...s-http-956656/
__________________
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; 17/09/2012 a las 14:20
  #7 (permalink)  
Antiguo 04/08/2009, 12:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Para ver el estatus de algún sitio, con file_get_contents hay una variable que sostiene la información de la cabecera $http_response_header
Código PHP:
Ver original
  1. <?php
  2. file_get_contents("http://forosdelweb.com/");
  3. var_dump($http_response_header);
El problema de esta forma es que file_get_contents, tiene que cargar toda la página y una vez cargada la variable te dará la información. Puedes indicar límites a la descarga indicando el cuarto y quinto parametro que no pase información de la página o lea por ejemplo un solo caracter.
Código PHP:
Ver original
  1. <?php
  2. //ningún caracter pasa
  3. file_get_contents("http://forosdelweb.com/",null,null,0,0);
  4. var_dump($http_response_header);
  5.  
  6. //pasa solamente el primer caracter
  7. file_get_contents("http://forosdelweb.com/",null,null,0,1);
  8. var_dump($http_response_header);
Pero hay una forma más sencilla de lograr ver la cabecera y es usando get_headers.
Código PHP:
Ver original
  1. <?php
  2. var_dump(get_headers('http://forosdelweb.com/',1));
  3.  
  4. //Este sería la forma de verificar si una página está funcionando o no
  5. $getHeader = get_headers('http://forosdelweb.com/',1);
  6. echo $getHeader[0];

También cURL puede ver los estatus de los sitios web. Para este código verificaremos el estatus de los enlaces. Es una buena forma para ver si los enlaces que hemos posteado en la pagina estan rotos o han sido movidos. Solo escribe el nombre en el navegador
http://localhost/nombre_de_este_arch...s_de_links.com No tiene que ser otra direccion puede ser hasta tus propios archivos.

Una vez que una página se haya cargado, el programa utiliza el XPath para obtener una lista de enlaces en la página. Entonces, después de un preprocesamiento busca cada uno de los vínculos, los enlace son recuperados. Debido a que sólo necesita las cabeceras de estas respuestas, no necesitamos usar el método de GET, esto lo hacemos con la opción CURLOPT_NOBODY. Al activar CURLOPT_HEADER le indica a curl_exec() que incluya en la respuesta la cabecera en la cadena que envia. Basado en la respuesta, el estatus del link es impreso a la misma vez con la nueva localidad si ha sido movido.

Código PHP:
Ver original
  1. <?php
  2. $url = $_GET['url'];
  3.  
  4. // Load the page
  5. list($page,$pageInfo) = load_with_curl($url);
  6.  
  7. if(!strlen($page)) die("No page retrieved from $url");
  8.  
  9. // Convert to XML for easy parsing
  10. $opts = array('output-xhtml' => true, 'numeric-entities' => true);
  11. $tidy = new tidy;
  12. $xml = $tidy->repairString($page,$opts);
  13.  
  14. $doc = new DOMDocument();
  15. $doc->loadXML($xml);
  16. $xpath = new DOMXPath($doc);
  17. $xpath->registerNamespace('xhtml','http://www.w3.org/1999/xhtml');
  18.  
  19. // Compute the Base URL for relative links
  20. $baseURL = '';
  21. // Check if there is a <base href=""/> in the page
  22. $nodeList = $xpath->query('//xhtml:base/@href');
  23. if ($nodeList->length == 1) {
  24.     $baseURL = $nodeList->item(0)->nodeValue;
  25. }
  26. // No <base href=""/>, so build the Base URL from $url
  27. else {
  28.     $URLParts = parse_url($pageInfo['url']);
  29.     if (! (isset($URLParts['path']) && strlen($URLParts['path']))) {
  30.         $basePath = '';
  31.     } else {
  32.         $basePath = preg_replace('#/[^/]*$#','',$URLParts['path']);
  33.     }
  34.     if (isset($URLParts['username']) || isset($URLParts['password'])) {
  35.         $auth = isset($URLParts['username']) ? $URLParts['username'] : '';
  36.         $auth .= ':';
  37.         $auth .= isset($URLParts['password']) ? $URLParts['password'] : '';
  38.         $auth .= '@';
  39.     } else {
  40.         $auth = '';
  41.     }
  42.     $baseURL = $URLParts['scheme'] . '://' .
  43.                $auth . $URLParts['host'] .
  44.                $basePath;
  45. }
  46.  
  47. // Keep track of the links we visit so we don't visit each more than once
  48. $seenLinks = array();
  49.  
  50. // Grab all links
  51. $links = $xpath->query('//xhtml:a/@href');
  52.  
  53. foreach ($links as $node) {
  54.     $link = $node->nodeValue;
  55.     // resolve relative links
  56.     if (! preg_match('#^(http|https|mailto):#', $link)) {
  57.         if (((strlen($link) == 0)) || ($link[0] != '/')) {
  58.             $link = '/' . $link;
  59.         }
  60.         $link = $baseURL . $link;
  61.     }
  62.     // Skip this link if we've seen it already
  63.     if (isset($seenLinks[$link])) {
  64.         continue;
  65.     }
  66.     // Mark this link as seen
  67.     $seenLinks[$link] = true;
  68.     // Print the link we're visiting
  69.     echo $link.': ';
  70.     flush();
  71.  
  72.     list($linkHeaders, $linkInfo) = load_with_curl($link, 'HEAD');
  73.     // Decide what to do based on the response code
  74.     // 2xx response codes mean the page is OK
  75.     if (($linkInfo['http_code'] >= 200) && ($linkInfo['http_code'] < 300)) {
  76.         $status = 'OK';
  77.     }
  78.     // 3xx response codes mean redirection
  79.     else if (($linkInfo['http_code'] >= 300) && ($linkInfo['http_code'] < 400)) {
  80.         $status = 'MOVED';
  81.         if (preg_match('/^Location: (.*)$/m',$linkHeaders,$match)) {
  82.                 $status .= ': ' . trim($match[1]);
  83.         }
  84.     }
  85.     // Other response codes mean errors
  86.     else {
  87.         $status = "ERROR: {$linkInfo['http_code']}";
  88.     }
  89.     // Print what we know about the link
  90.     echo "$status\n";
  91. }
  92.  
  93. function load_with_curl($url, $method = 'GET') {
  94.     $c = curl_init($url);
  95.     curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  96.     if ($method == 'GET') {
  97.         curl_setopt($c,CURLOPT_FOLLOWLOCATION, true);
  98.     }
  99.     else if ($method == 'HEAD') {
  100.         curl_setopt($c, CURLOPT_NOBODY, true);
  101.         curl_setopt($c, CURLOPT_HEADER, true);
  102.     }
  103.     $response = curl_exec($c);
  104.     return array($response, curl_getinfo($c));
  105. }

Para hacer la petición usando un proxy puedes hacerlo con cURL de esta forma:
Código PHP:
Ver original
  1. <?php
  2. $url = 'http://www.google.com/';
  3. $ch = curl_init($url);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  6. curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
  7. curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
  8. curl_setopt($ch, CURLOPT_PROXY, 'ip:port');
  9. $page = curl_exec($ch);
  10.  
  11. $a = curl_getinfo($ch);
  12. print_r ($a);
  13.  
  14.  
  15. echo $page;
Este código fue tomado de este tema http://www.forosdelweb.com/f18/curl-...8/#post3784335

Para hacer la petición usando un proxy puedes hacerlo con fopen de esta forma:
Código PHP:
Ver original
  1. <?php
  2. $opts = array('http' => array('proxy' => 'tcp://127.0.0.1:8080', 'request_fulluri' => true));
  3. $context = stream_context_create($opts);
  4. $fp = fopen('http://www.example.com', 'r', false, $context);
Este código fue tomado de este tema http://www.forosdelweb.com/4147617-post93.html


IPN (Instant Payment Notification) Paypal y cURL
Para enviar a Paypal y verificar si es verdadero la transacción que haya hecho el usuario, usando el IPN (Instant Payment Notification)
Código PHP:
Ver original
  1. <?php
  2. // Choose url
  3. if(array_key_exists('test_ipn', $_POST) && 1 === (int) $_POST['test_ipn'])
  4.     $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
  5. else
  6.     $url = 'https://www.paypal.com/cgi-bin/webscr';
  7.  
  8. // Set up request to PayPal
  9. $request = curl_init();
  10. (
  11.     CURLOPT_URL => $url,
  12.     CURLOPT_POST => TRUE,
  13.     CURLOPT_POSTFIELDS => http_build_query(array('cmd' => '_notify-validate') + $_POST),
  14.     CURLOPT_RETURNTRANSFER => TRUE,
  15.     CURLOPT_HEADER => FALSE,
  16.     CURLOPT_SSL_VERIFYPEER => TRUE,
  17.     CURLOPT_CAINFO => 'cacert.pem',
  18. ));
  19.  
  20. // Execute request and get response and status code
  21. $response = curl_exec($request);
  22. $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);
  23.  
  24. // Close connection
  25. curl_close($request);
  26.  
  27.  
  28. if($status == 200 && $response == 'VERIFIED')
  29. {
  30.     $str = '';
  31.     foreach($_POST as $k => $v){
  32.         $str .= $k . ' => ' . $v . PHP_EOL;
  33.     }
  34.     file_put_contents('ipn.txt', $str);
  35. }
  36. else
  37. {
  38.     file_put_contents('ipn_error.txt', $response . PHP_EOL . $status);
  39. }
Para obtener el archivo cacert.pem deben ir a http://curl.haxx.se/docs/caextract.html y bajarlo o copiar y pegar el contenido a ese archivo con ese nombre y extensión. Lo deben colocar al lado del archivo que van a usar este código o a la ruta que hayan indicado.

Esta información la tomé de la siguiente página http://www.geekality.net/2011/05/28/...ification-ipn/
__________________
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; 18/04/2012 a las 08:45
  #8 (permalink)  
Antiguo 04/08/2009, 12:42
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

ESPECTACULAR! gracias por compartir!
__________________
Salu2!
  #9 (permalink)  
Antiguo 06/08/2009, 13:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Para eso estamos, solo espero que aporten a este tema. Si no entienden algo me dejan saber para poder editarlo y explicarlo mejor.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 16/08/2009, 10:45
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Mas que interesante
  #11 (permalink)  
Antiguo 16/08/2009, 11:00
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

muy interesante, sobre todo lo de que se puede usar la función stream_context_create con file_get_contents
__________________
Todo sobre programación en PHP
  #12 (permalink)  
Antiguo 17/08/2009, 10:41
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

simplexml_load_file() es muy lenta....... sabes si puedo ocupar otra funcion ?

gracias!
  #13 (permalink)  
Antiguo 17/08/2009, 10:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Aqui tienes una lista de todas las posibles formas para cargar un XML con PHP. Verifica si con el DOM logras lo que quieres.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 27/08/2009, 09:02
 
Fecha de Ingreso: febrero-2009
Mensajes: 4
Antigüedad: 15 años, 9 meses
Puntos: 0
Pregunta: timeout

Antes que nada, es la segunda vez que escribo, porque no se donde fue la primera!
Desde mi hosting no puedo acceder a un rss de yahoo, ni con curl ni con get_file_contents.
lei todo el tuto (muy bueno por cierto) y no logro dar en el clavo, siempreme responde:
Warning: file_get_contents(weather.yahooapis.com/forecastrss?p=CAXX0443&u=c) [function.file-get-contents]: failed to open stream: Connection timed out in...

(la url del rss esta mal escrita para que la acepte el foro, le quite las 3w)

Tenes idea de que puede no funcionar? muchas gracias!
  #15 (permalink)  
Antiguo 27/08/2009, 09:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Lo hice de esta forma y me salio. No le coloques las www con eso no sale ni escribiendolo en el campo de direcciones
Código php:
Ver original
  1. <?php
  2. echo file_get_contents("http://weather.yahooapis.com/forecastrss?p=CAXX0443&u=c");
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 27/08/2009, 11:36
 
Fecha de Ingreso: febrero-2009
Mensajes: 4
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Cita:
Iniciado por abimaelrc Ver Mensaje
Lo hice de esta forma y me salio. No le coloques las www con eso no sale ni escribiendolo en el campo de direcciones
Código php:
Ver original
  1. <?php
  2. echo file_get_contents("...://weather.yahooapis.com/forecastrss?p=CAXX0443&u=c");
Tenes razon, lo que le habia borrado era eso (no puedo escribirlo aca aun) y no las 3w, pero aun asi no logro conectarme. Si te sirve de dato, desde este mismo hosting no he podido conectarme remotamente a una db externa.
He probado de muchas formas distintas distintas y no logro leer de afuera, tenes idea que puede ser?
Gracias de antemano por contestarme tan rapido!
Si te llega a interesar te hago un ftp para probar .
  #17 (permalink)  
Antiguo 27/08/2009, 12:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Tienes que ver si tienen activado allow_url_fopen. La forma de verlo es usando el phpinfo() y ver si esta activado.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 27/08/2009, 14:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Para bajar archivos....
Edito: Se encuentra en el mensaje #6
__________________
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; 09/04/2010 a las 06:14
  #19 (permalink)  
Antiguo 27/08/2009, 20:46
 
Fecha de Ingreso: febrero-2009
Mensajes: 4
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Cita:
Iniciado por abimaelrc Ver Mensaje
Para bajar un archivo usando cURL se puede lograr de esta forma

Código PHP:
Ver original
  1. <?php
  2. $url = '.example.com/hola.zip';
  3.  
  4. $g=basename($url);
  5.  
  6. if(!is_file($g)){
  7.     $fp=fopen ($g, "w");
  8.  
  9.     $ch=curl_init($url);
  10.     curl_setopt ($ch,CURLOPT_FILE, $fp);
  11.     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
  12.     curl_exec ($ch);
  13.     curl_close ($ch);
  14.  
  15.     fclose($fp);
  16. }
Realmente me volvi loco probando de todo, hasta que al final llame a mi hosting y no me dijeron que era, simplemente desde donde yo estaba alojado no se podia salir, asi que me cambiaron de servidor y listo.
Te agradezco mucho tu ayuda de todas maneras!!
  #20 (permalink)  
Antiguo 22/10/2009, 17:39
 
Fecha de Ingreso: octubre-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Cita:
Iniciado por abimaelrc Ver Mensaje
Para bajar un archivo usando cURL se puede lograr de esta forma

Código PHP:
Ver original
  1. <?php
  2. $url = '';
  3.  
  4. $g=basename($url);
  5.  
  6. if(!is_file($g)){
  7.     $fp=fopen ($g, "w");
  8.  
  9.     $ch=curl_init($url);
  10.     curl_setopt ($ch,CURLOPT_FILE, $fp);
  11.     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
  12.     curl_exec ($ch);
  13.     curl_close ($ch);
  14.  
  15.     fclose($fp);
  16. }
Genial!
Esto estaba buscando...!!

Pero tengo una duda. Como puedo ver cuanto pesa el archivo antes de bajarlo? Tambien necesito saber si es de determinado tipo. Por ejemplo, ZIP, RAR, etc...

Si se cumplen las condiciones de peso y tipo de arhivo quiero que se baje, pero si no NO...
  #21 (permalink)  
Antiguo 23/10/2009, 00:30
Avatar de Animeonx  
Fecha de Ingreso: agosto-2009
Ubicación: Debajo de tu Cama
Mensajes: 56
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Muy interesante... jeje, se me ocurren muchas cosas indebidas que se pueden hacer :D
__________________
Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D
--
Comunidad Anime | ikawaii.net
  #22 (permalink)  
Antiguo 23/10/2009, 06:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

@anonimooo0, Para la primera las funciones que conozco se tienen que trabajar desde el servidor que estes usando el codigo de cURL, por ejemplo tienes esta funcion filesize.

Para la segunda con basename puedes saber el tipo de extension o mime_content_type o pathinfo.
__________________
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; 23/10/2009 a las 06:42
  #23 (permalink)  
Antiguo 23/10/2009, 06:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 8
Antigüedad: 15 años
Puntos: 0
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

@abimaelrc

Pero para eso debo primero bajar el archivo?

No se pueden leer las cabeceras de los archivos antes de bajar para asi poder verificar esas cosas antes?
  #24 (permalink)  
Antiguo 23/10/2009, 07:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Hiciste la prueba usando direccion absoluta, por ejemplo usando pathinfo
Código PHP:
Ver original
  1. <?php
  2. pathinfo("http://www.example.com/archivo.zip");
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #25 (permalink)  
Antiguo 31/10/2009, 01:25
Avatar de Animeonx  
Fecha de Ingreso: agosto-2009
Ubicación: Debajo de tu Cama
Mensajes: 56
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Una pregunta, tal vez ya esta la respuesta... pero no la abre visto.
Supongamos que llamo a una pagina pero existe un link en especifico que no quiero que salga. ¿Como lo elimino?
__________________
Si te gusto/sirvió mi respuesta, dame un buen karma... no se que utilidad tenga en el foro, pero eleva mi ego. :D
--
Comunidad Anime | ikawaii.net
  #26 (permalink)  
Antiguo 31/10/2009, 12:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Podrias lograrlo colocandolo en una condicion y usando preg_match, si esta el link especifico que estas indicando entonces con preg_replace o str_replace podrías borrar esa parte del link.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #27 (permalink)  
Antiguo 06/01/2010, 14:10
 
Fecha de Ingreso: mayo-2008
Mensajes: 64
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

y esto sería posible en páginas con permiso restringido?? mas que nada porque por ejemplo, el google no se puede ver.
  #28 (permalink)  
Antiguo 06/01/2010, 14:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Si es posible usar el codigo con google, mira este ejemplo
Código PHP:
Ver original
  1. <?php
  2. $page = file_get_contents('http://www.google.com/');
  3. echo $page;
  4. ?>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #29 (permalink)  
Antiguo 06/01/2010, 16:00
 
Fecha de Ingreso: mayo-2008
Mensajes: 64
Antigüedad: 16 años, 5 meses
Puntos: 0
hostia, y porque ahora me funciona? DIOS! gracias!

toda la tarde en ello para que 2 lineas funcionen... eso si solo me funciona en local, pero me sirve!!! guau me acabas de librar de trabajo de... 1 mes a hacerlo en... 2 dias!

Última edición por GatorV; 06/01/2010 a las 16:18
  #30 (permalink)  
Antiguo 27/01/2010, 11:31
 
Fecha de Ingreso: enero-2010
Mensajes: 79
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: [APORTE] file_get_contents(), cURL, HTTP_Request

Esto es lo que necesitaba n.n

Cita:
<?php
$url = 'http://www.example.com/hola.zip';

$g=basename($url);

if(!is_file($g)){
$fp=fopen ($g, "w");

$ch=curl_init($url);
curl_setopt ($ch,CURLOPT_FILE, $fp);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
curl_exec ($ch);
curl_close ($ch);

fclose($fp);
}

lo implemente en mi página pero lo estoy usando para grabar más de una imagen de diferentes urls las dudas son:
1. como hacer para grabarlos a una carpeta especifica?
2. pero con otro nombre?

Etiquetas: aportes
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

SíEste tema le ha gustado a 43 personas




La zona horaria es GMT -6. Ahora son las 11:42.