الأدلة

أضف تحديد الموقع الجغرافي من جهة الخادم إلى تطبيق Node أو PHP

مكان تحديد الموقع الجغرافي هو الخادم في معظم حالات الاستخدام، ومنها التخصيص والقيم الافتراضية والتحليلات، لأنه لا يحتاج إلى أي تعاون من متصفح الزائر ولا إلى أي سكربت يعمل من جهة العميل على الإطلاق.

الطلب نفسه

بغض النظر عن اللغة، الاستدعاء هو نفسه: طلب HTTP GET بسيط إلى /v1/ip، مع إرسال المفتاح في ترويسة.

GET /v1/ip?ip=203.0.113.60
X-API-Key: mg_live_examplekey123
{
  "status": "ok",
  "ip": "203.0.113.60",
  "version": 4,
  "found": true,
  "country": "Netherlands",
  "country_code": "NL",
  "region": "North Holland",
  "city": "Amsterdam",
  "postcode": "1012",
  "lat": 52.3702,
  "lon": 4.8952,
  "timezone": "Europe/Amsterdam",
  "asn": 3344,
  "org": "Example ISP"
}

في تطبيق PHP

اجلب عنوان الزائر نفسه من الطلب، وعادة يكون $_SERVER['REMOTE_ADDR']، ومرّره كمعامل ip، ثم أرسل طلب HTTP باستخدام عميل HTTP الذي يستخدمه إعداد PHP لديك أصلًا، سواء curl أو مكتبة مغلِّفة له. وبما أن هذا الموقع نفسه مبني بلغة PHP تُعرض من جهة الخادم دون JavaScript من جهة العميل، فإن هذا النمط يندمج بشكل طبيعي في مسار العرض العادي للصفحة، مع توفر بيانات الموقع قبل توليد ترميز الصفحة.

في تطبيق Node

اقرأ عنوان الزائر من كائن الطلب الوارد، وعادة يكون req.socket.remoteAddress أو ترويسة يضبطها وكيل عكسي مثل X-Forwarded-For إذا كان هناك وكيل أمام تطبيقك، وأرسل طلب GET نفسه باستخدام عميل HTTP الذي تختاره قبل عرض الاستجابة.

التعامل مع وكيل أمام تطبيقك

إذا كان تطبيقك يعمل خلف موازن أحمال أو وكيل عكسي، فقد يكون العنوان الذي تراه شيفرتك مباشرة هو عنوان الوكيل نفسه لا عنوان الزائر. تحقق من ترويسة العنوان المُمرَّر التي يضبطها وكيلك ومرّر ذلك العنوان صراحة كمعامل ip، بدلًا من الاعتماد على العنوان البعيد الخام للاتصال، الذي سيحدد في هذه الحالة موقع بنيتك التحتية بدلًا من موقع الزائر.

تكلفة الطلب في الحالتين

الاستعلام نفسه يكلف طلبًا واحدًا سواء استُدعي من PHP أو Node أو أي لغة خلفية أخرى، لأن التكلفة مرتبطة بوصول الطلب إلى API، لا بما أجرى الاستدعاء. خزّن النتيجة مؤقتًا طوال مدة الجلسة في أي من اللغتين لتجنب تكرار الاستعلام في كل صفحة.

تحديد الموقع الجغرافي من جهة الخادم يعمل بالطريقة نفسها بغض النظر عن لغة الخادم الخلفي: استدعاء HTTP واحد بعنوان الزائر. خيارات المصادقة الكاملة موجودة في توثيق المصادقة، وقائمة الحقول في توثيق الاستعلام عن IPv4.