<?php
ob_start(); // Limpia el buffer por errores de salida
// Permite un mayor tiempo de respuesta del socket
ini_set('memory_limit', '-1');

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


$url = 'https://easyvent.solerpalau.com/series-info/595/192';

/*$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);                                 // Dirección URL a capturar
curl_setopt($ch, CURLOPT_PROXY, $arrProxies[$i]['proxyAndPuerto']);  // El proxy HTTP para enviar peticiones a través de tunel.
curl_setopt($ch, CURLOPT_PROXYTYPE, $arrProxies[$i]['tipoProxy']);   // Puede ser CURLPROXY_HTTP (por defecto), CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A o CURLPROXY_SOCKS5_HOSTNAME
curl_setopt($ch, CURLOPT_TIMEOUT, 60);                         // Número máximo de segundos permitido para ejectuar funciones cURL
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);                  // Número de segundos a esperar cuando se está intentado conectar. Use 0 para esperar indefinidamente
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);                // "true" para seguir cualquier encabezado "Location: " que el servidor envíe como parte del encabezado HTTP (observe la recursividad, PHP seguirá tantos header "Location: " como se envíen, a no ser que la opción CURLOPT_MAXREDIRS esté establecida)
//curl_setopt($ch, CURLOPT_MAXREDIRS, 10);                                 // Número máximo de redirecciones HTTP a seguir. Use esta opción con CURLOPT_FOLLOWLOCATION
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                // "true" para devolver el resultado de la transferencia como string del valor de curl_exec() en lugar de mostrarlo directamente
$data = curl_exec($ch);                                                    // Ejecuta la sesión cURL que se le pasa como parámetro
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);                  // Obtener información sobre una transferencia específica -> El último código de respuesta. A partir de PHP 5.5.0 y cURL 7.10.8, este es un alias heredado de CURLINFO_RESPONSE_CODE

echo $arrProxies[$i]['proxyAndPuerto'].'<br>';
echo $httpcode.'<br>';
//echo $data;
//echo curl_error($ch);
curl_close($ch); // Cierra la sesión cURL
exit;*/

extraerTabla($url);

function extraerTabla($url){
    $exito = false;
    $errorDescripcion = '';
    // Los servidores se obtuvieron de la página https://www.proxyscan.io/ ** Todos son de México
    $arrProxies = array(); // Lista de Proxies para realizar las peticiones
    //$arrProxies[0]['proxyAndPuerto'] = '187.188.168.57:9991'; // No funciona (puede servir para realizar pruebas del ciclo)
    //$arrProxies[0]['tipoProxy'] = CURLPROXY_SOCKS4;
    $arrProxies[0]['proxyAndPuerto'] = '190.9.54.24:5678';
    $arrProxies[0]['tipoProxy'] = CURLPROXY_SOCKS4;
    /*$arrProxies[1]['proxyAndPuerto'] = '187.216.90.46:5678';
    $arrProxies[1]['tipoProxy'] = CURLPROXY_SOCKS4;
    $arrProxies[2]['proxyAndPuerto'] = '201.148.28.17:5678';
    $arrProxies[2]['tipoProxy'] = CURLPROXY_SOCKS4;
    $arrProxies[3]['proxyAndPuerto'] = '187.189.81.246:4153';
    $arrProxies[3]['tipoProxy'] = CURLPROXY_SOCKS4;
    $arrProxies[4]['proxyAndPuerto'] = '187.217.39.66:5678';
    $arrProxies[4]['tipoProxy'] = CURLPROXY_SOCKS4;
    $arrProxies[5]['proxyAndPuerto'] = '177.242.150.6:5678';
    $arrProxies[5]['tipoProxy'] = CURLPROXY_SOCKS4;*/

    for ($i = 0; $i <= 0; $i++) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);                                 // Dirección URL a capturar
        curl_setopt($ch, CURLOPT_PROXY, $arrProxies[$i]['proxyAndPuerto']);  // El proxy HTTP para enviar peticiones a través de tunel.
        curl_setopt($ch, CURLOPT_PROXYTYPE, $arrProxies[$i]['tipoProxy']);   // Puede ser CURLPROXY_HTTP (por defecto), CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A o CURLPROXY_SOCKS5_HOSTNAME
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);                         // Número máximo de segundos permitido para ejectuar funciones cURL
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);                  // Número de segundos a esperar cuando se está intentado conectar. Use 0 para esperar indefinidamente
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);                // "true" para seguir cualquier encabezado "Location: " que el servidor envíe como parte del encabezado HTTP (observe la recursividad, PHP seguirá tantos header "Location: " como se envíen, a no ser que la opción CURLOPT_MAXREDIRS esté establecida)
        //curl_setopt($ch, CURLOPT_MAXREDIRS, 10);                                 // Número máximo de redirecciones HTTP a seguir. Use esta opción con CURLOPT_FOLLOWLOCATION
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                // "true" para devolver el resultado de la transferencia como string del valor de curl_exec() en lugar de mostrarlo directamente
        $data = curl_exec($ch);                                                    // Ejecuta la sesión cURL que se le pasa como parámetro
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);                  // Obtener información sobre una transferencia específica -> El último código de respuesta. A partir de PHP 5.5.0 y cURL 7.10.8, este es un alias heredado de CURLINFO_RESPONSE_CODE
        curl_close($ch); // Cierra la sesión cURL

        if (($httpcode >= 200) && ($httpcode < 300)) {
            $contenido = $data;

            if ($contenido) {
                $tablaHTML = "<div class='section section-grey'>";
                $seccionGris = strstr($contenido, "section section-grey");
                $removeFooter = strstr($seccionGris, "section cookie-warning", true);
                $tablaHTML .= ("<div class=\" " . $removeFooter . "\" >");
                $tablaHTML .= "</div>";
                $exito = true;
                echo $tablaHTML;
            } else {
                $exito = false;
            }
            goto fin_extraerTabla;
        }else{
            $exito = false;
        }

    } // Fin del ciclo

    fin_extraerTabla :
    if($exito == false){
        if(empty($errorDescripcion)){
            echo "<p style='text-align: center;'>Los servidores proxy dejarón de funcionar. Por favor contacte con al administrador del sistema.</p>";
        }else{
            echo $errorDescripcion;
        }
    }

}


function extraerTabla_BKP($url)
{
    /*echo $url.'<br><br>';
    exit;*/

    $exito = false;
    //for ($i = 0; $i <= 5; $i++) {
        $i = 1;

        $arrProxies[0] = '187.188.168.57:9991';
        $arrProxies[1] = '148.217.94.54:3128';
        $arrProxies[2] = '187.189.96.94:9991';
        $arrProxies[3] = '187.162.11.94:3128';
        $arrProxies[4] = '177.234.0.218:43173';
        $arrProxies[5] = '187.178.238.177:3629';

        $proxy = $arrProxies[$i];
        $proxy = explode(":", $proxy);

        $ch = curl_init($proxy[0]);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0');

        curl_setopt($ch,CURLOPT_HTTPHEADER,
            array(
                'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
                //'Accept-Encoding: gzip, deflate, br',
                'Accept-Language: es-MX,es;q=0.8,en-US;q=0.5,en;q=0.3',
                'Connection: keep-alive',
                'Cookie: _ga=GA1.2.821969284.1629478795; _hjid=3cb7741d-c042-4afc-929e-4f5118af6b39; _fbp=fb.1.1629478795375.600180933; __hstc=103515359.e581ce363a680b3a9efc57ba8ca11a0c.1629478795538.1629478795538.1629478795538.1; hubspotutk=e581ce363a680b3a9efc57ba8ca11a0c; __hssrc=1; _gcl_au=1.1.442740855.1629478796; ASP.NET_SessionId=2sv4h4h0b0yc4s5xullfgkt1; easyDuct_v2=true; __utma=170610228.821969284.1629478795.1629748529.1629752991.6; __utmc=170610228; __utmz=170610228.1629732566.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=170610228.3.10.1629752991; __utmt=1'
            )
        );

        curl_setopt($ch,CURLOPT_TIMEOUT, 10);
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

        /*curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Configura cURL para devolver el resultado como cadena
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Configura cURL para que no verifique el peer del certificado dado que nuestra URL utiliza el protocolo HTTPS*/


        $data = curl_exec($ch); // Establece una sesión cURL y asigna la información a la variable $data

        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpcode >= 200 && $httpcode < 300) {
            /*$proxyN = 'tcp://' . $arrProxies[$i];
            $context = array(
                'https' => array(
                    'proxy' => $proxyN,
                    'request_fulluri' => True,
                    'header'=> 'Cookie: _ga=GA1.2.821969284.1629478795; _hjid=3cb7741d-c042-4afc-929e-4f5118af6b39; _fbp=fb.1.1629478795375.600180933; __hstc=103515359.e581ce363a680b3a9efc57ba8ca11a0c.1629478795538.1629478795538.1629478795538.1; hubspotutk=e581ce363a680b3a9efc57ba8ca11a0c; __hssrc=1; _gcl_au=1.1.442740855.1629478796; ASP.NET_SessionId=2sv4h4h0b0yc4s5xullfgkt1; easyDuct_v2=true; __utma=170610228.821969284.1629478795.1629748529.1629752991.6; __utmc=170610228; __utmz=170610228.1629732566.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=170610228.3.10.1629752991; __utmt=1'
                ),
            );

            $context = stream_context_create($context);

            $contenido = file_get_contents($url, false, $context);*/

            $contenido = $data;

            if ($contenido) {
                /*echo $contenido;
                exit;*/

                $tablaHTML = "<div class='section section-grey'>";
                $seccionGris = strstr($contenido, "section section-grey");
                $removeFooter = strstr($seccionGris, "section cookie-warning", true);
                $tablaHTML .= ("<div class=\" " . $removeFooter . "\" >");
                $tablaHTML .= "</div>";
                $exito = true;
                echo $tablaHTML;
            } else {
                $exito = false;
            }
            goto fin_extraerTabla;
        }else{
            $exito = false;
        }
    //}
    fin_extraerTabla :
    /*if($exito == false){
        echo "<p style='text-align: center;'>El contenido no fue cargado correctamente, recargue la página.</p>";
    }*/

    curl_close($ch);

}
