Laravel peut utiliser la même interface IP de deux façons utiles : le backend vérifie l’IP sortante du serveur, tandis que la page de téléchargement appelle l’interface dans le navigateur pour répartir les visiteurs.
Explication de l’API
Cet article explique à la fois la vérification de l’IP serveur et la répartition des téléchargements selon l’IP visiteur. Ces usages sont différents et ne doivent pas être confondus.
{"ip":"185.220.236.7","country":"TW","region":"Taiwan","city":"Taipei"}
Cas d’utilisation
Ces scénarios montrent la valeur de l’interface d’information IP tout en séparant clairement IP serveur et IP visiteur.
- Ces scénarios montrent la valeur de l’interface d’information IP tout en séparant clairement IP serveur et IP visiteur.
- Vérifier l’IP serveur et répartir les téléchargements dans Laravel
- Explication de l’API
- Recommandations SEO et UX
Logique d’implémentation
Avant l’implémentation, identifiez le demandeur : une requête serveur renvoie l’IP serveur, une requête navigateur renvoie l’IP visiteur.
- Avant l’implémentation, identifiez le demandeur : une requête serveur renvoie l’IP serveur, une requête navigateur renvoie l’IP visiteur.
- Cet article explique à la fois la vérification de l’IP serveur et la répartition des téléchargements selon l’IP visiteur. Ces usages sont différents et ne doivent pas être confondus.
- Tous les exemples ci-dessous utilisent directement
https://my.ipin.io/info, avec commentaires et textes d’interface localisés. - Le contenu par défaut doit rester complet et lisible, tandis que le contenu régional sert d’amélioration. Les moteurs indexent un contenu stable et la page reste utilisable si l’API échoue.
Exemple de code
Tous les exemples ci-dessous utilisent directement https://my.ipin.io/info, avec commentaires et textes d’interface localisés.
IpController
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class IpController extends Controller
{
public function server()
{
$info = ['ip'=>'Inconnu', 'country'=>'Inconnu', 'region'=>'Inconnu', 'city'=>'Inconnu'];
try {
// Appel serveur vers /info : vérifie l’IP sortante du serveur.
$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 sortante du serveur</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 = "Bienvenue. Ceci est le contenu par défaut.";
const contentMap = { TW: "Contenu pour les visiteurs de Taïwan", US: "Contenu pour les visiteurs des États-Unis", JP: "Contenu pour les visiteurs du Japon" };
try {
// Appel navigateur vers /info : détecte l’IP du visiteur.
const info = await fetch("https://my.ipin.io/info").then(res => res.json());
el.textContent = contentMap[info.country] || defaultText;
} catch (e) {
// Conserver la valeur par défaut si la requête API échoue.
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']);
Recommandations SEO et UX
Le contenu par défaut doit rester complet et lisible, tandis que le contenu régional sert d’amélioration. Les moteurs indexent un contenu stable et la page reste utilisable si l’API échoue.
Erreurs fréquentes
Les points suivants influencent la précision de l’article, l’exploitabilité du code et la crédibilité de l’explication de l’API.
- Les points suivants influencent la précision de l’article, l’exploitabilité du code et la crédibilité de l’explication de l’API.
- Le contenu par défaut doit rester complet et lisible, tandis que le contenu régional sert d’amélioration. Les moteurs indexent un contenu stable et la page reste utilisable si l’API échoue.
- Avant l’implémentation, identifiez le demandeur : une requête serveur renvoie l’IP serveur, une requête navigateur renvoie l’IP visiteur.
- Ces scénarios montrent la valeur de l’interface d’information IP tout en séparant clairement IP serveur et IP visiteur.
Résumé
Cet article explique à la fois la vérification de l’IP serveur et la répartition des téléchargements selon l’IP visiteur. Ces usages sont différents et ne doivent pas être confondus.
FAQ
Cette FAQ est spécifique à cet article et n’est pas répétée dans tous les articles.