Получение неправильного IP-адреса через AJAX, но исправление в прямом API PHP - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий код PHP для получения IP-адреса клиента:

<?php

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
echo json_encode(array('ip'=>getRealIpAddr()));

?>

Когда я запускаю этот API напрямую или через Почтальон, я получаю правильный IP-адрес, то есть мой собственный IP-адрес.

Мой код AJAX:

var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                  if (this.readyState == 4 && this.status == 200) {
                        var getresponse = JSON.parse(this.responseText);
                        ipaddr = getresponse.ip;
                        console.log(ipaddr);
                  }  
            };
            xmlhttp.open("GET", "ipapi.php", true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.send();

Но когда я вызываю этот API через AJAX в моем HTML, я получаю неправильный IP-адрес. Результирующий IP-адрес, который я получаю в ajax, принадлежит моему серверу (серверу Hostgator), а не моему собственному IP-адресу.

Что я делаю не так?

1 Ответ

0 голосов
/ 11 июля 2019

В вашем примере с PHP вы получаете HTTP_CLIENT_IP с функцией getRealIpAddr(), но при вызове ajax вы используете только ipapi.php в качестве URL.

Вы должны ввести полноеURL-адрес этого вызова выглядит следующим образом:

xmlhttp.open("GET", "http://www.myAwesomeURL.com/getIpApi", true);

И на этом GET /getIpApi пути к серверу должен быть возвращен результат вашей функции getRealIpAddr(), тогда вы сможете использовать его в своем внешнем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...