Rutarelativa

Publicidad

Anotaciones reducidas

  • La vida en un día: Película de un día en la Tierra La vida en un día: Película de un día en la Tierra

    La vida en un día -Life in a day- es una película hecha por los propios usuarios de Youtube, que durante el día 24 de Julio del 2010 grabaron las cosas que pasaban en su vida durante ese día, y el director Kevin McDonald ha reunido en forma de película de un día en la Tierra.

    De una hora y media de duración, veremos todo tipo de escenas en todas las partes del mundo, con una emotiva visión del mundo real tanto con sus cosas bellas y buenas, como con la más cruda visión del ser humano y su realidad.

    [La vida en un día: Película de un día en la Tierra]

  • Video: Las posibilidades de Kinect Video: Las posibilidades de Kinect

    Cuando oímos hablar de Kinect, no podemos evitar pensar en un "simple" aparato de detección de movimientos para videojuegos, y en cierto modo es así.

    Lo bueno es que Microsoft ha lanzado una SDK de Kinect para que los usuarios puedan crear aplicaciones que exploten las capacidades del dispositivo, dando lugar a miles de ideas.

    El siguiente video es al fin y al cabo con fines publicitarios, pero nos da que pensar acerca de las aún sin explotar posibilidades de Kinect. Disfrutadlo.

    [Video: Las posibilidades de Kinect]

  • La historia de los Exploradores Web La historia de los Exploradores Web

    Desde prácticamente los comienzos de Internet los Exploradores Web o Navegadores web nos han acompañado, haciendo las veces de herramientas indispensables para una navegación que a cada año que pasa se hace más cómoda y más intuitiva.

    En Testking encuentro una imágen que contiene un gran esquema de la historia de los Exploradores Web desde el primer Nescape en 1994 hasta los navegadores modernos de este año 2011.

    Una imágen interesante para conocer cuál ha sido la evolución en éste área.

    [La historia de los Exploradores Web]

Últimos comentarios

  • Avatar del usuario Alberto Alberto Hola Sergio, Excelente tu post, llegué a ti debido que quiero...
  • Avatar del usuario aiko aiko Hola, yo uso esta calculadora saber cuánto para enviar y recibir:...
  • Avatar del usuario Samir Jalabe Samir Jalabe Buenas quien me ayuda hacer un rombo en Php por favor de antemano...
  • Avatar del usuario andres andres y como los recibes en javascript?
  • Avatar del usuario sdasdas sdasdas WINDOWS 7 ---> C:\Program Files\Common Files\Adobe\OOBE\PDApp\UWA
  • Avatar del usuario Mariano Fuenzalida Mariano Fuenzalida Disculpa, cuando despliego el menú de ayuda en photoshop...
  • Avatar del usuario Metztli Metztli Ese código de php, ¿funciona para magento?
  • Avatar del usuario daniel daniel Buenas tardes quisiera saber como se escribe mi nombre...
  • Avatar del usuario Omar Omar Hola: Estoy rehaciendo mi web que es un gran catálogo y quiero...
  • Avatar del usuario carlos carlos muchas por tu aporte

Lo más comentado

Lo más visto

Post al azar

Curl en PHP

(0)
19 / Diciembre / 2009
Curl en PHP

Hace poco realizamos una función Curl para Python, ya que teníamos la necesidad de realizar peticiones a una página Web en dicho lenguaje. En todos los servidores no tenemos la posibilidad de usar Python por ello hemos trasladado la función a otro lenguaje más Universal como es PHP. La función Curl para PHP es muy parecida, aunque le hemos añadido unas cuantas mejoras.

Función Curl para PHP

function followLocation($crCurl, &$crInfo)
{
    // Variables
    static $nCurlLoops = 0;
    $nCurlMaxLoops     = 20;

    $sPage             = null;
    $aMatches          = null;
    $aLastUrl          = null;
    $aUrl              = null;
    $sHeader           = null;


    // Si hemos realizado 20 redirecciones paramos

    if( $nCurlLoops >= $nCurlMaxLoops )
        return false;

    // Obligamos que la petición nos nuestre la cabecera para poder ver donde nos llevara la redireccion

    curl_setopt( $crCurl, CURLOPT_HEADER, 1 );

    // Ejecutamos curl
    $sPage = curl_exec( $crCurl );

    // Obtenemos información sobre la petición

    $crInfo = curl_getinfo( $crCurl );

    // Separamos la cabecera de lo que esl contenido de la página

    list( $sHeader, $sPage ) = explode( "\n\n", $sPage, 2 );

    if( in_array( $crInfo["http_code"], array( 301, 302 ) ) )

    {
        // Obtenemos la dirección donde se iba a realizar la redicción
        $aMatches = array();
        preg_match( "/Location:(.*?)\n/", $sHeader, $aMatches );

        $aUrl = @parse_url( trim( array_pop( $aMatches ) ) );

        // Comprobamos sea un array valido, de no serlo no podremos realizar la redirección

        if( ! is_array( $aUrl) )
            return $sPage;

        // Obtenemos desde donde se va hacer la redirección
        $aLastUrl = parse_url( curl_getinfo( $crCurl, CURLINFO_EFFECTIVE_URL ) );


        // Contruimos la url de la redirección
        if( ! $aUrl["scheme"] )
            $aUrl["scheme"] = $aLastUrl["scheme"];


        if( ! $aUrl["host"] )
            $aUrl["host"] = $aLastUrl["host"];

        if( ! $aUrl["path"] )

            $aUrl["path"] = $aLastUrl["path"];

        // Realizamos la petición con la nueva URL obtenida que sera la redicción

        curl_setopt( $crCurl, CURLOPT_URL, $aUrl["scheme"] . "://" . $aUrl["host"] . $aUrl["path"] . ($aUrl["query"]? "?" . $aUrl["query"] : "") );


        // Sumamos la redirección
        ++$nCurlLoops;

        return followLocation( $crCurl, $crInfo);
    }
    else
    {
        $crInfo["redirect_count"] = $nCurlLoops;

        return $sPage;
    }
}


function curl($aArgumentos, &$crInfo = false)
{
    // Variables
    $sUrl        = (! empty( $aArgumentos["url"] ) ? $aArgumentos["url"] : null);

    $sPostField  = (! empty( $aArgumentos["post"] ) ? http_build_query( $aArgumentos["post"] ) : null);
    $ckCookie    = (! empty( $aArgumentos["cookie"] ) ? $aArgumentos["cookie"] : null);

    $nHeader     = (! empty( $aArgumentos["header"] ) ? $aArgumentos["header"] : 0);
    $nReturn     = (! empty( $aArgumentos["return_transfer"] ) ? $aArgumentos["return_transfer"] : 1);

    $nTimeOut    = (! empty( $aArgumentos["time_out"] ) ? $aArgumentos["time_out"] : 30);
    $sAgent      = (! empty( $aArgumentos["agent"] ) ? $aArgumentos["agent"] : "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8");

    $sReferer    = (! empty( $aArgumentos["referer"] ) ? urlencode( $aArgumentos["referer"] ) : "-");

    $aReferer    = (! empty( $aArgumentos["aReferer"] ) ? $aArgumentos["aReferer"] : array() );
    $aProxys     = (! empty( $aArgumentos["proxy"] ) ? $aArgumentos["proxy"] : array() );

    $sUserPasswd = (! empty( $aArgumentos["user_passwd"] ) ? $aArgumentos["user_passwd"] : null);
    $aProxy      = null;

    $nRandom     = null;
    $crCurl      = curl_init();
    $sPage       = null;
    $aHeader     = array( "Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg", "Connection: Keep-Alive", "Content-type: application/x-www-form-urlencoded;charset=UTF-8" );

    $nRandomRf   = null;


    // Comprobamos si nos han pasado un array con referers para modificar el referer

    if( count( $aReferer ) )
    {
        // Referer aleatorio
        $nRandomRf = rand( 0, count( $aReferer ) -1 );

        $sReferer  = str_replace( "[curl_text]" , $sReferer, $aReferer[$nRandomRf] );
    }

    // Opciones
    curl_setopt( $crCurl, CURLOPT_URL, $sUrl );
    curl_setopt( $crCurl, CURLOPT_HEADER, $nHeader );

    curl_setopt( $crCurl, CURLOPT_RETURNTRANSFER, $nReturn );
    curl_setopt( $crCurl, CURLOPT_HTTPHEADER, $aHeader );
    curl_setopt( $crCurl, CURLOPT_CONNECTTIMEOUT, $nTimeOut );
    curl_setopt( $crCurl, CURLOPT_REFERER, $sReferer );

    curl_setopt( $crCurl, CURLOPT_USERAGENT, $sAgent);

    if( $sUserPasswd )
        curl_setopt( $crCurl, CURLOPT_USERPWD, $sUserPasswd );

    if( count( $aProxys ) )

    {
        // Usamos un random para ir cambiando de proxys
        $nRandom = rand( 0, count( $aProxys ) - 1 );

        $aProxy  = explode( ":", $aProxys[$nRandom] );

        curl_setopt( $crCurl, CURLOPT_CONNECTTIMEOUT, 60 );

        curl_setopt( $crCurl, CURLOPT_PROXY, $aProxys[$nRandom] );

        curl_setopt( $crCurl, CURLOPT_HTTPPROXYTUNNEL, 0);
    }

    if( $sPostField )
    {
        curl_setopt( $crCurl, CURLOPT_POST, 1 );
        curl_setopt( $crCurl, CURLOPT_POSTFIELDS, $sPostField );

    }

    if( $ckCookie )
    {
        curl_setopt( $crCurl, CURLOPT_COOKIEJAR, $ckCookie );
        curl_setopt( $crCurl, CURLOPT_COOKIEFILE, $ckCookie );
    }

    // open basedir Or Safe Mode

    if( ini_get( "open_basedir" ) == "" && ini_get( "safe_mode" == "Off" ) )
    {
        curl_setopt( $crCurl, CURLOPT_FOLLOWLOCATION, 1 );

        $sPage = curl_exec( $crCurl );

        $crInfo = curl_getinfo( $crCurl );
    }
    else
        return followLocation( $crCurl, $crInfo );



    // Comprobamos si ha sido exitosa la conexion de no serlo volvemos hacerla
    if( ! in_array( $crInfo["http_code"], array( 200, 302, 301 ) ) )

        curl( $aArgumentos );

    // Si la conexión ha sido posible cerramos
    if( in_array( $crInfo["http_code"], array( 200, 302, 301 ) ) )

        curl_close( $crCurl );

    return( $sPage );
}

Argumentos para la función Curl

url: Dirección donde se realizará la petición por CURL.
post: Datos que se enviarán en una operación de tipo “HTTP POST”. Debe ser pasado como una cadena ‘para1 = val1 & para2 = val2 &…’.
cookie: Dirección donde se guardará la cookie, si se añade sólo el nombre se guardara en el directorio donde se ejecute el Script.
header: Mostrar la cabecera HTTP, por defecto 0.
return_transfer: Posibilidad de obtener el HTML de la petición. Por defecto 1.
time_out: Tiempo de espera para la petición. Por defecto 30.
agent: Contenido de “User-Agent:” para la cabecera en una petición HTTP. Por defecto ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8’.
referer: Contenido de “Referer:” para la cabecera en una petición HTTP. Por defecto ‘-‘.
aReferer: Array con varios casos de ‘Referer:’. Podríamos añadir todos las referencias de Google, Yahoo, etc. Así mostraría el referido como si viniera de unos de estos buscadores. Por defecto NULL.
proxy: Array con varias IP de servidores Proxy. Por defecto NULL.
user_passwd: Usuario y contraseña que se usarán para la conexión, con el formato USUARIO:PASSWORD. Por defecto NULL.

Ejemplo: Cambiar estado de Twitter mediante Curl

curl(array( "url"         => "http://twitter.com/statuses/update.json",
            "post"        => array( "status" => "Hola desde PHP!" ),

            "user_passwd" => "keldrox:password"
));

Una simple función Curl para PHP que nos ayudará a la hora de desarrollar scripts que necesiten realizar muchas peticiones. Ya que su simpleza enviando solo argumentos nos ayuda estar escribiendo muchas líneas de opciones para las peticiones Curl, aparte de tener un código más simple.

Enlace: Descargar Curl para PHP

votar

Artículos relacionados

Sobre KeLDroX

296

Desarrollador en entornos web y Diseñador de profesión, muy activo, que busca siempre enfrentarse a retos cada vez más dificiles. Si un día no hago algo nuevo o no he superado alguna dificultad para mi es un día vacío. Cuento con dos titulaciones: Técnico en Explotación de Sistemas Informáticos y Técnico Superior en Desarrollo de Aplicaciones Informáticas. Fundé rutarelativa porque siempre quise tener un sitio en donde compartir mis experiencias profesionales y a los problemas que me enfrento día a día en el ámbito profesional.

Sigue a Ruta Relativa

Trackback en Curl en PHP

Hasta el momento el artículo Curl en PHP no tiene Trackbacks.

Comentarios en Curl en PHP

Hasta el momento el artículo Curl en PHP no tiene comentarios, sé el primero en comentar en él.

Escribir comentario en Curl en PHP

¡Tu opinión nos interesa!. Escribe tu opinión lo más clara posible para que todos podamos entenderla, evita el spam, comentarios ofensivos, etc. ya que serán eliminados. Tu opinión sera moderada antes de ser publicada, por lo que su aparición en la web puede tardar unos minutos. Si deseáis ponerse en contacto para sugerencias o críticas podéis hacerlo desde el formulario de contacto.

Sigue a rutarelativa en twitter
Editores de Ruta Relativa
Avatar del editor KeLDroX KeLDroX Desarrollador en entornos web y Diseñador de profesión, muy activo, que busca siempre enfrentarse a retos cada vez más dificiles. Si un día no hago algo nuevo o no he superado alguna dificultad para mi es un día vacío. Cuento con dos titulaciones: Técnico en Explotación de Sistemas Informáticos y Técnico Superior en Desarrollo de Aplicaciones Informáticas. Fundé rutarelativa porque siempre quise tener un sitio en donde compartir mis experiencias profesionales y a los problemas que me enfrento día a día en el ámbito profesional.
Avatar del editor sergiocius sergiocius Soy un desarrollador en entornos web y escritorio, entusiasta y amante de mi trabajo del que cada día espero aprender algo nuevo. Tengo una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y actualmente curso el primer año de Carrera Universitaria con el poco tiempo que me deja el trabajo. Fundé rutarelativa porque quiero que mi esfuerzo y tiempo invertidos en aprender y poner en práctica algo le resulte útil y fácil a otro usuario, del mismo modo que yo aprendo y ahorro tiempo con la ayuda de los demás.
Avatar del editor Victor Victor Desarrollador de aplicaciones informáticas con altos objetivos y ambiciones. Busco cada día aprender algo nuevo, ya que mi mundo se encuentra en constante actualización. Cuento con una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y una larga experiencia profesional.