Как определить страну посетителя в php или javascript бесплатно с помощью запроса ip

Существует множество сервисов, которые не являются бесплатными и предлагают вам как разработчику простой API для извлечения страны, континента и других геоданных из запроса сервера. Тем не менее, есть некоторые разработчики, которые не хотят платить, но еще меньше за услугу, потому что вы только тестируете, у вас нет денег или какой-либо другой причины. На странице геоплуги.нет предлагается бесплатный API для поиска страны пользователя, который отправляет запрос на наш сервер.

Как это работает

Нам нужно сделать запрос к geoplugin.net/json.gp с параметром get, который должен быть IP-адресом запроса.

Доступная информация

Мы можем получить некоторую важную информацию бесплатно, в объекте доступны следующие ключи:

  • Geoplugin_request: Содержит IP, который мы только что отправили в параметре IP get.
  • Geoplugin_status: код статуса http запроса
  • геоплугин_город: IP-адрес города запроса (если имеется)
  • Geplugin_countryCode: 2-х значный код страны (США, DE, RU)
  • geoplugin_countryName
  • geoplugin_continentCode
  • Geoplugin_currencyCode: деньги, которые обрабатывает страна (EUR, USD)
  • geoplugin_regionCode
  • geoplugin_regionName
  • geoplugin_areaCode
  • Geoplugin_currencySymbol: HTML-символ валюты.

Как использовать это с PHP

С php все очень просто, нам нужно получить IP-адрес запроса, используя собственную переменную php $ SERVER, которая содержит информацию о запросе. Затем нам нужно получить информацию об упомянутой веб-странице (которая на самом деле будет возвращать ответ JSON, но нам нужно преобразовать в массив с помощью функции json_decode).

$ip = $_SERVER['REMOTE_ADDR']; // This will contain the ip of the request
// You can use a more sophisticated method to retrieve the content of a webpage with php using a library or something
// We will retrieve quickly with the file_get_contents
$dataArray = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
var_dump($dataArray);
// outputs something like (obviously with the data of your IP) :
// geoplugin_countryCode => "DE",
// geoplugin_countryName => "Germany"
// geoplugin_continentCode => "EU"
echo "Hello visitor from: ".$dataArray["geoplugin_countryName"];

Как использовать это с Javascript

С Javascript немного сложнее. Сначала нам нужно каким-то образом получить IP-адрес пользователя, проблема в том, что не так просто получить IP-адрес с помощью php, вам нужно так или иначе сделать серверный вызов для получения IP-адреса. Если вы не можете использовать PHP, потому что у вас нет сервера или что-то, взгляните на этот вопрос в StackOverflow, может быть возможно получить ip, добавив скрипт, который использует JSONP (обратный вызов).

Затем нам нужно сделать запрос к указанному URL, чтобы получить страну IP-адреса, но мы столкнемся со следующей проблемой, если мы просто сделаем запрос к URL:

XMLHttpRequest cannot load http://www.geoplugin.net/json.gp?ip=my.ip.number  No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mywebsiterequestdomain' is therefore not allowed access.

Эта проблема связана с ограничением CORS, вы не можете выполнить ajax-запрос к серверу, который не принадлежит вам. Чтобы решить эту проблему, нам нужно преодолеть это ограничение, мы будем использовать веб-сайт cors -where, чтобы избежать этого. Тогда наш запрос будет выглядеть так:

var ip = "the ip number, retrieved of some way by a server";
// the request will be to http://www.geoplugin.net/json.gp?ip=my.ip.number but we need to avoid the cors issue, and we use cors-anywhere api.
$.getJSON("https://cors-anywhere.herokuapp.com/http://www.geoplugin.net/json.gp?ip="+ip,function(response){
console.log(response);
// output an object which contains the information.
alert("Hello visitor from "+ response.geoplugin_countryName);
});

Примечание. Если вы можете и имеете сервер для отправки запроса, используйте PHP, так как он прост и понятен, потому что нам не нужно использовать cors-где угодно.

Живой пример

Следующая скрипта позволяет вам получить страну из ip с помощью простой формы с функциями javascript и jQuery.getJSON. Перейдите на вкладку результатов и попробуйте сами.

Повеселись !

Ссылка на основную публикацию
Adblock
detector