CURLOPT de CURL
Escrito por Alex Barros Aúnque el título parezca más bien un trabalenguas proviniente del mismísimo Chiquito de la Calzada, hoy voy a comentar algunas potentes opciones que nos brinda la biblioteca CURL.
Para mí CURL era un auténtico desconocido, cuando en el anterior host no tenia ni fopen para urls externas. Pero una vez lo conoces se convierte en una herramienta muy potente y útil.
Lo primero a realizar en nuestro código, es siempre la inicialización de curl, con la función curl_init()
-
$ch = curl_init();
Hecho esto tendremos en la variable $ch el identificador de nuestra sesión CURL. Ahora sólo nos tenemos que dedicar a marcarle nuestras preferencias para la conexión. Voy a mostraros a continuación las que me parecen más importantes, pero recordad que hay muchas más.
-
// Indicamos la URL a la que queremos acceder
-
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
-
// Si la conexión tarda más de 30 segundos, que no siga
-
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
-
// Si la conexión falla, que lo haga de forma "silenciosa"
-
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
-
// Permitir que la conexión se redirija si le es indicado
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
// El resultado lo quiero almacenar en una variable, en lugar de que lo imprima por pantalla
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
-
// Voy a enviar contenido en forma de variables POST
-
curl_setopt($ch, CURLOPT_POST, 1);
-
// Estos son los campos POST, en forma de array asociativo
-
// Voy a finjir que tengo una serie de Cookies, incluida la de sesión
-
curl_setopt($ch, CURLOPT_COOKIE, ‘nombre=Alex; galleta=chocolate; PHPSESSID=0123456789qwertyasdfg9876543210′);
-
// Foy a finjir que provengo de otra web, la que yo quiera
-
curl_setopt($ch, CURLOPT_REFERER, ‘http://zumbe.net/’);
-
// Voy a indicar qué User Agent estoy usando. Por ejemplo el de un iPhone
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘mozilla/5.0 (iphone; u; cpu like mac os x; en) applewebkit/420+ (khtml, like gecko) version/3.0 mobile/1c25 safari/419.3′);
Por último, ejecutamos la sesión, y cerramos la misma.
-
// Almaceno en la variable $resultado el codigo de la pagina
-
$resultado = curl_exec($ch);
-
// Se cierra el recurso CURL y se liberan los recursos del sistema
-
curl_close($ch);
Sólo con esas herramientas ya podemos hacer un proxy muy completo, que nos haga lo que nosotros queramos.
Ahora sólo es echarle imaginación, ingenio y paciencia.



Diciembre
0:45 foro_movil Ha dicho:
Hola, tengo una duda: pongamos que mi script necesita realizar un enorme volumen de envío de peticiones a un host mediante curl pero para agilizar prefiero no recoger las respuestas, sino al final preguntarle por el resultado (si ha almacenado todo o no)
lo digo porque tengo esto hecho en curl pero solo la funcion curl_exec bloquea la ejecución de código hasta que recibe una respuesta, y yo necesito hacer del orden de 700 a 1000 consultas seguidas… a unos 3 segundos por respuesta en los malos momentos… se me retrasa hasta media hora en finalizar la operación
¿alguna idea?
gracias!
Diciembre
1:28 Alex Barros Ha dicho:
Caramba! esas magnitudes son muy grandes!
Lo cierto es que si la función curl_exec tarda 3 segundos, no hay más narices que esperar esos 3 segundos en que ejecute, independientemente de cuándo y dónde quieres el resultado.
Como no conozco el script en concreto, puedo darte algunas ideas, para que investigues un poco. Por ejemplo, si Curl no te parece manejable, tal vez las conexiones socket te sean más versátiles: Conexiones socket…
También puedo sugerirte que hagas esos cálculos complejos offline, con Cronjob: Cronjob…
Mucha suerte, y contacta de nuevo si sigues teniendo cuestiones.