Laravel puede usar la misma interfaz IP de dos formas prácticas: el backend comprueba la IP de salida del servidor y la página de descarga llama la interfaz en el navegador para enrutar visitantes.
Explicación de la API
Este artículo explica tanto la comprobación de IP del servidor como el enrutamiento de descargas por IP del visitante. Son casos distintos y no deben confundirse.
{"ip":"185.220.236.7","country":"TW","region":"Taiwan","city":"Taipei"}
Casos de uso
Estos casos muestran el valor de la interfaz de información IP y separan claramente IP del servidor e IP del visitante.
- Estos casos muestran el valor de la interfaz de información IP y separan claramente IP del servidor e IP del visitante.
- Comprobar IP del servidor y enrutar descargas en Laravel
- Explicación de la API
- Recomendaciones SEO y UX
Lógica de implementación
Antes de implementar, identifique el solicitante: las solicitudes del servidor devuelven IP del servidor y las del navegador devuelven IP del visitante.
- Antes de implementar, identifique el solicitante: las solicitudes del servidor devuelven IP del servidor y las del navegador devuelven IP del visitante.
- Este artículo explica tanto la comprobación de IP del servidor como el enrutamiento de descargas por IP del visitante. Son casos distintos y no deben confundirse.
- Todos los ejemplos siguientes usan directamente
https://my.ipin.io/info, con comentarios y textos de interfaz localizados. - El contenido predeterminado debe seguir completo y legible, mientras el contenido regional actúa como mejora. Los buscadores rastrean contenido estable y la página sigue siendo útil si falla la API.
Ejemplo de código
Todos los ejemplos siguientes usan directamente https://my.ipin.io/info, con comentarios y textos de interfaz localizados.
IpController
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class IpController extends Controller
{
public function server()
{
$info = ['ip'=>'Desconocido', 'country'=>'Desconocido', 'region'=>'Desconocido', 'city'=>'Desconocido'];
try {
// Llamada del servidor a /info: comprueba la IP de salida del servidor.
$response = Http::timeout(3)->get('https://my.ipin.io/info');
if ($response->successful()) { $info = array_merge($info, $response->json()); }
} catch (\Throwable $e) {}
return view('server-ip', ['info' => $info]);
}
public function download()
{
return view('download');
}
}
server-ip.blade.php
<div class="server-ip-box">
<h2>IP de salida del servidor</h2>
<p>IP:{{ $info['ip'] }}</p>
<p>Country:{{ $info['country'] }}</p>
<p>Region:{{ $info['region'] }}</p>
<p>City:{{ $info['city'] }}</p>
</div>
download.blade.php
<div class="download-box">
<a id="ipinDownloadBtn" href="/download/default/app.zip">Download</a>
<p id="ipinDownloadNode">Default</p>
</div>
<script>
(async function () {
const el = document.getElementById("ipinDownloadNode");
const btn = document.getElementById("ipinDownloadBtn");
const defaultText = "Bienvenido. Este es el contenido predeterminado.";
const contentMap = { TW: "Contenido para visitantes de Taiwán", US: "Contenido para visitantes de Estados Unidos", JP: "Contenido para visitantes de Japón" };
try {
// Llamada del navegador a /info: detecta la IP del visitante.
const info = await fetch("https://my.ipin.io/info").then(res => res.json());
el.textContent = contentMap[info.country] || defaultText;
} catch (e) {
// Mantener el valor predeterminado si falla la solicitud API.
el.textContent = defaultText;
}
const nodeMap = { TW: "/download/tw/app.zip", US: "/download/us/app.zip", JP: "/download/jp/app.zip" };
try {
const info = await fetch("https://my.ipin.io/info").then(res => res.json());
btn.href = nodeMap[info.country] || "/download/default/app.zip";
el.textContent = info.country || "Default";
} catch (e) { btn.href = "/download/default/app.zip"; }
})();
</script>
routes/web.php
use App\Http\Controllers\IpController;
Route::get('/server-ip', [IpController::class, 'server']);
Route::get('/download', [IpController::class, 'download']);
Recomendaciones SEO y UX
El contenido predeterminado debe seguir completo y legible, mientras el contenido regional actúa como mejora. Los buscadores rastrean contenido estable y la página sigue siendo útil si falla la API.
Errores comunes
Los siguientes puntos afectan la precisión del artículo, la utilidad del código y la credibilidad de la explicación de la API.
- Los siguientes puntos afectan la precisión del artículo, la utilidad del código y la credibilidad de la explicación de la API.
- El contenido predeterminado debe seguir completo y legible, mientras el contenido regional actúa como mejora. Los buscadores rastrean contenido estable y la página sigue siendo útil si falla la API.
- Antes de implementar, identifique el solicitante: las solicitudes del servidor devuelven IP del servidor y las del navegador devuelven IP del visitante.
- Estos casos muestran el valor de la interfaz de información IP y separan claramente IP del servidor e IP del visitante.
Resumen
Este artículo explica tanto la comprobación de IP del servidor como el enrutamiento de descargas por IP del visitante. Son casos distintos y no deben confundirse.
Preguntas frecuentes
Las preguntas siguientes fueron redactadas específicamente para este artículo y se relacionan directamente con la implementación.