Rutarelativa

Publicidad

Últimas anotaciones reducidas

  • Amnistía Pirata: Juega a Machinarium por solo 5 dólares Amnistía Pirata: Juega a Machinarium por solo 5 dólares

    Machinarium es uno de esos juegos sobresalientes que tanto nos gusta, y éste un buen movimiento para conseguir beneficios, pues han lanzado lo que ellos han llamado Amnistía Pirata. La Amnistía Pirata consiste en que los jugadores puedan jugar a Machinarium por solo 5 dólares (unos 3,90 €), ya que estiman que entre el 5% y el 15% de los que adquirieron el juego pagaron por él, y con este movimiento pretenden que aquellos jugadores que lo obtuvieron por diferentes vías (y los nuevos interesados) puedan comprarlo por un precio muy reducido.

    Incluye además la banda sonora del juego, y podéis jugar a una entretenida demo en la página oficial del juego para que, los que no lo conozcáis, podáis hacerlo y entrar en el mundo de Machinarium. La oferta es válida hasta el 12 de Agosto.

    [Amnistía Pirata: Juega a Machinarium por solo 5 dólares]

  • Video de una proyección 3D en Amsterdam Video de una proyección 3D en Amsterdam

    Este video se corresponde con una proyección 3D que hicieron en plena calle de Amsterdam, donde vemos que los elementos del escenario van sufriendo transformaciones dando como resultado un impresionante video con efecto 3D.

    Cuando te das cuenta que el edificio no está realmente ahí es cuando realmente impresiona.

    [Video de una proyección 3D en Amsterdam]

  • Curiosidades y Easter Eggs de Toy Story 3 [Video] Curiosidades y Easter Eggs de Toy Story 3 [Video]

    Tras ver Toy Story 3 y salir de la sala bastante encantado con la película me dispuse a buscar curiosidades y Easter Eggs de Toy Story 3 y he dado con este video de Youtube, que os dejo en el enlace final, que contiene algunos interesantes, y otros bastante exagerados.

    Entre dobladores curiosos, mensajes ocultos por los escenarios o cameos de otras de sus películas, el video nos va presentando lo que no pudimos ver mientras disfrutábamos de la última obra de Disney Pixar.

    [Video de Curiosidades y Easter Eggs de Toy Story 3]

Últimos comentarios

  • Avatar del usuario andres andres si pudieran especificar bien todos los pasos para la gente que no...
  • Avatar del usuario andres andres ese juego se pausa despues de las 40 horas que llevas jugadas...
  • Avatar del usuario Sergiocius Sergiocius De momento no has seguido los pasos para escribir un comentario...
  • Avatar del usuario raul suarez ladinez raul suarez ladinez !hola¡ quiero saber si segui los pasos correctamente y por lo...
  • Avatar del usuario Sergiocius Sergiocius Hola Boye, gracias por tu comentario. Vaya, ¡veo que eres de...
  • Avatar del usuario Boye Boye Hola! he llegado hoy de rebote al blog y me resulta bastante...
  • Avatar del usuario Jorge Jorge En Google Chrome no funciona lo de arrastrar a la barra de marcadores.
  • Avatar del usuario Alejandro Alejandro Juas... ya solo queda 1 mes y 10 días :S ¡Que verano mas largo!
  • Avatar del usuario Sura Sura Algunas fotos nos se pueden ver, yo no entiendo de esto pero al...
  • Avatar del usuario Sergiocius Sergiocius @Manuel Eso es difícil creo, ya que desde blogger cuando posteas...

Fans en Facebook de Ruta Relativa

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

288

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.